AddAttributeToFilter में मल्टी कंडीशन्स (या और अंदर और अंदर)


19

AddAttributeToFilter में एक बहु-स्थिति कैसे बनाएं?

मैं इस तरह एक SQL क्वेरी में परिणाम चाहते हैं (संलग्न छवि):

WHERE ((`e`.`news_from_date` > '2013-09-12') OR (`e`.`news_to_date` < '2013-09-12'))
AND ((((`e`.`special_price` IS NULL))) OR (((`e`.`special_price` IS NOT NULL)) AND ((`e`.`special_from_date` < '2013-09-12') OR (`e`.`special_to_date` > '2013-09-12'))))

$collection->addAttributeToFilter('special_price', array('null'=>'special_price'), 'left');

धन्यवादयहाँ छवि विवरण दर्ज करें


मुझे यह बहुत उपयोगी लगा: blog.chapagain.com.np/…
nicolallias

जवाबों:


41

आपको अपनी इच्छित क्वेरी बनाने के लिए इनमें से अधिकांश तकनीकों को संयोजित करने में सक्षम होना चाहिए। बिक्री तालिकाओं के लिए, आप शायद उपयोग करेंगे addFieldToFilter- लेकिन Zend_Db_Exprसंभावना है कि आपके लिए कम से कम प्रतिरोध का रास्ता:

AddAttributeToFilter:

मैजेंटो विकी के अनुसार : जब ऐसी ORपरिस्थितियां बनती हैं, जिनमें आप निम्न कार्य कर सकते हैं:

यदि कोई सरणी दी गई है, लेकिन कोई विशेषता कोड निर्दिष्ट नहीं किया गया है, तो उसे OR के समूह के रूप में व्याख्या किया जाएगा जिसे उसी तरीके से संसाधित किया जाएगा।

तो, इससे हम निम्नलिखित निर्माण कर सकते हैं:

$collection->addAttributeToFilter(
    array(
        array('attribute'=> 'someattribute','like' => 'value'),
        array('attribute'=> 'otherattribute','like' => 'value'),
        array('attribute'=> 'anotherattribute','like' => 'value'),
    )
);

यह WHEREप्रारूप का एक खंड आउटपुट करेगा :

WHERE ((someattribute LIKE 'value') OR (otherattribute LIKE 'value') OR (anotherattribute LIKE 'value'))

addFieldToFilter:

उस मामले में जहां मॉडल सीधे एक डीबी तालिका से जुड़ा हुआ है, निम्नलिखित को नाम से डेटाबेस कॉलम में सशर्त लागू करने के लिए आवश्यक है:

$collection->addFieldToFilter(
    array('title', 'content'),
    array(
        array('like'=>'%$titlesearchtext%'), 
        array('like'=>'%$contentsearchtext%')
    )
)

Zend_Db_Expr:

बहुत अधिक जटिल निर्माणों के लिए आप अपना स्वयं का निर्माण कर सकते हैं जहां क्लॉज का उपयोग किया जाता है Zend_Db_Expr। उदाहरण के लिए :

$collection->getSelect()->where(new Zend_Db_Expr("(e.created_at > '2013-01-01 00:00:00' OR e.created_at <'2012-01-01 00:00:00)"));

स्रोत:

/programming/5301231/addattributetofilter-and-or-condition-in-magentos-collection

/programming/3826474/magento-addfieldtofilter-two-fields-match-as-or-not-and/7851884#7851884


आपके उत्तर के लिए धन्यवाद, लेकिन जो चीज मैं चाहता हूं वह है जैसे कि स्थिति बनाना: WHERE (CONDITION_1 OR (CONDITION_2 AND (CONDITION_3 OR CONDITION_4)))। मैं पहले से ही उस क्वेरी को पोस्ट करता हूं जो मुझे ऊपर चाहिए।
एंडी इरावन

1
मुझे लगा कि मैंने वह बिंदु बना लिया है जिसका आप उपयोग कर सकते हैं Zend_Db_Expr:$collection->getSelect()->where(new Zend_Db_Expr("(CONDITION_1 OR (CONDITION_2 AND (CONDITION_3 OR CONDITION_4)))"));
फिल्माएं

आपके जवाब पर धन्यवाद, यह नमूना है, जो मैंने addAttributeToFilter और और स्थिति के साथ किया था उसका नमूना है: pastebin.com/ZznxLAai
Andhi Irawan

क्या यह निर्धारित करने का कोई तरीका है कि किस विशेषता ने परिणाम उत्पन्न किया? मैं तीन क्षेत्रों भर में एक कस्टम मॉडल संग्रह खोज कर रहा हूँ ( name, altnernate_name, description) और पता करने के लिए जब एक परिणाम की वजह से है चाहते हैं descriptionविशेषता।
pspahn

4

आप शामिल करना चाहते हैं और के संयोजन के साथ या तो

$colemanManufacturerSku = Mage::getResourceModel('catalog/product_collection')
    ->addAttributeToSelect('sku')
    ->addAttributeToSelect('sku_1')
    ->addAttributeToSelect('sku_2')
    ->addAttributeToSelect('sku_3')
    ->addAttributeToFilter('type_id', array('eq' => 'simple'))
    // Above condition will AND with following OR
    ->addAttributeToFilter(
        array(
            array(
                'attribute' => 'sku_1',
                'neq' => ''
            ),
            array(
                'attribute' => 'sku_2',
                'neq' => ''
            ),
            array(
                'attribute' => 'sku_3',
                'neq' => ''
            )
        )
    );

2
आपके समाधान के लिए +1, लेकिन मुझे इसके ठीक विपरीत चाहिए, यानी WHERE (CONDITION_1 और CONDITION_2) या (CONDITION_3 AND CONDITION_4))), क्या आप मदद कर सकते हैं
हरीस

1

या addFieldToFilter का उपयोग करके शर्त


$collection->addFieldToFilter
                (   
                    array('email','mobile'),
                    array($emaiId,$mobNum)
                );

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