इकाईयोजना कई शर्तों के साथ वर्गीकरण शर्तों पर कोई परिणाम नहीं देता है


13

मेरे उपयोग के मामले में मेरे पास एक इकाई है जिसमें दो क्षेत्र हैं जो अद्वितीय वोकैबुलरी के संदर्भ में हैं।

समाचार: - टैग (इकाई संदर्भ) - श्रेणी (इकाई संदर्भ)

अगर मैं उन संदर्भों में से किसी एक पर क्वेरी करता हूं, तो मुझे परिणाम मिलते हैं जब मैं दोनों (और फ़िल्टर) क्वेरी करता हूं तो मुझे कोई परिणाम नहीं मिलता है। मैंने इसे अब तक ट्रिपल-चेक किया है और ऐसी इकाइयाँ हैं जिनमें मैं टैग और श्रेणी दोनों को शामिल कर रहा हूँ।

क्या यह यूजर-एरर है या ड्रुपल बग?

$query = \Drupal::entityQuery('node')
    ->condition('status', 1)
    ->condition('type', 'news')
;
$group = $query->andConditionGroup()
    ->condition('field_tag.entity.name', ['cars'], 'IN')
    ->condition('field_category.entity.name', ['sport'], 'IN')
;
$query->condition($group);
$nids = $query->execute();

संपादित करें: मैंने एक काम-आस-पास पाया है। हालांकि यह एक गैर-वांछनीय स्थिति है

$query = \Drupal::entityQuery('node')
    ->condition('status', 1)
    ->condition('type', 'news')
;
$group = $query->andConditionGroup()
    ->condition('field_tag.entity.name', ['cars'], 'IN')
    ->condition('field_category', [1], 'IN')
;
$query->condition($group);
$nids = $query->execute();

EQ के लिए डिफ़ॉल्ट संयोजन है (और जिसे आप बदल सकते हैं) इसलिए एक साथ समूहीकरण की स्थिति में कुछ भी गलत नहीं है ... यही कारण है कि यह वहां है। मुझे समझ नहीं आया कि आपने क्या उम्मीद की है?

जवाबों:


8

आप ऐसा नहीं कर सकते इसका कारण यह है कि ये दोनों क्षेत्र एक ही इकाई के संदर्भ हैं। इसका मतलब है कि बेस टेबल एक ही बेस टेबल है।

आप Drupal को नोड तालिका में taxonomy_data तालिका में शामिल होने के लिए कह रहे हैं और फिर उस पर एक असंभव और स्थिति बनाते हैं।

पुनश्च

आप के condition('field_tags', 1);बजाय का उपयोग कर सकते हैंcondition('field_tags', [1], 'IN');

और जैसा कि टिप्पणियों में बताया गया है, AND स्थिति समूह डिफ़ॉल्ट है, इसलिए आपको इसे निर्दिष्ट करने की आवश्यकता नहीं है।

पी पी एस

आपके पास संदर्भ होने के लिए संदर्भित होने के लिए दोनों स्थितियों का उपयोग करना चाहिए।


1
यह उत्तर केवल एक भोली कल्पना को शामिल करता है कि इकाई क्वेरी कैसे काम कर सकती है। हालांकि, यह इससे कहीं अधिक सक्षम है। मेरा उत्तर जांचें।

3

एक जंगली, अप्रमाणित अनुमान:

$query = \Drupal::entityQuery('node')
  ->condition('status', 1)
  ->condition('type', 'news');

$query = $query->condition($query->andConditionGroup()->condition('field_tag.entity.name', ['cars'], 'IN'))
  ->condition($query->andConditionGroup()->condition('field_category.entity.name', ['sport'], 'IN'));

अगर यह काम नहीं करता है तो मुझे अगले सप्ताह IRC # drupal-योगदान में खोजें और हम इसे समाप्त कर देंगे।


यह ड्रुपल कोर में तय किया जाना चाहिए लेकिन काम करता है।
Mr.B

1

दरअसल मुझे इसके लिए एक हैक मिला। यहाँ मेरा स्पष्टीकरण है कि मैंने क्या पाया है:

मेरी सामग्री में 3 फ़ील्ड थे, जिनमें से प्रत्येक में अलग-अलग वोकैबुलरीज़ से एक टैक्सोनॉमी शब्द का संदर्भ था। और मैं उन लोगों के लिए संस्थाओं को क्वेरी करना चाहता था जिनके पास उन 3 क्षेत्रों (और स्थिति) में से प्रत्येक में एक विशिष्ट वर्गीकरण है।

आंतरिक एसक्यूएल क्वेरी की जाँच करना जो मैंने पाया कि स्थितियों के विभिन्न संयोजनों के साथ कई प्रयासों के बाद उत्पन्न हुई है

[Previous conditions] AND (taxonomy_term__[taxonomy_term_field_name] IN  (:db_condition_placeholder_2)) AND (taxonomy_term__[taxonomy_term_field_name] IN  (:db_condition_placeholder_3)) AND (taxonomy_term__[taxonomy_term_field_name] IN  (:db_condition_placeholder_4))

मूल रूप से जैसा कि आप देख सकते हैं, इसमें उस विशिष्ट शब्दावली का उपयोग करने वाले वास्तविक व्यक्तिगत क्षेत्रों का कोई संदर्भ नहीं है, इसलिए मेरा हैक ऐसा कुछ करना है:

 $query = \Drupal::entityQuery('node')
            ->condition('status', '1')
            ->condition('type', $content_type_machine_name)
            ->condition('field_holding_term_ref.entity.name', array($label_of_term_in_field1, $label_of_term_in_field2, $label_of_term_in_field3), 'IN');

फिर से यह काम करता है, मैंने इसका परीक्षण किया है और यह उन 3 टैक्सोनॉमी शर्तों के साथ केवल सामग्री प्रकार वापस करने वाली शर्त के रूप में काम करता है, भले ही उन टैक्सोनॉमी शर्तों के संदर्भ सामग्री प्रकार में विभिन्न क्षेत्रों में संग्रहीत हों।

मुझे हैक पर गर्व नहीं है, लेकिन यह काम करता है, इसलिए यदि यह किसी को बचाने में मदद कर सकता है, तो इसके लिए जाएं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.