AddAttributeToFilter- এ একাধিক শর্ত (OR এবং এবং এর ভিতরে এবং)


19

অ্যাডট্রিবিউটটোফিল্টারটিতে কীভাবে একটি বহু-শর্ত তৈরি করা যায়?

আমি এর মতো একটি এসকিউএল ক্যোয়ারিতে ফলাফল চাই (চিত্র সংযুক্ত):

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/…
নিকোলালিয়াস

উত্তর:


41

আপনার পছন্দের ক্যোয়ারী তৈরি করতে আপনার এই কৌশলগুলির বেশিরভাগটি একত্রিত করতে সক্ষম হওয়া উচিত। বিক্রয় টেবিলগুলির জন্য, আপনি সম্ভবত ব্যবহার করবেন addFieldToFilter- তবে Zend_Db_Exprসম্ভবত এটি আপনার পক্ষে সর্বনিম্ন প্রতিরোধের পথ:

অ্যাডট্রিবিউটটোফিল্টার:

ম্যাজেন্টো উইকির মতে : 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'))

অ্যাডফিল্ডটোফিল্টার:

যে ক্ষেত্রে মডেলটি সরাসরি কোনও ডিবি টেবিলের সাথে যুক্ত থাকে, সেই ক্ষেত্রে নাম অনুসারে ডাটাবেস কলামে কন্ডিশনাল প্রয়োগের জন্য নিম্নলিখিতগুলির প্রয়োজন:

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

জেনড_ডিবি_এক্সপ্রি:

আরও জটিল জটিল গঠনের জন্য আপনি নিজের তৈরি করতে পারেন যেখানে ক্লজ ব্যবহার করে 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 (শর্তাদি_1 বা (শর্তাবলী_2 এবং (শর্তাবলী 2004 বা শর্ত)))। আমি উপরে চাই এমন ক্যোয়ারীটি ইতিমধ্যে পোস্ট করেছি।
অন্ধি ইরওয়ান

1
আমি ভেবেছিলাম যে আমি আপনি যে পয়েন্টটি ব্যবহার করতে পারেন তা তৈরি করেছি Zend_Db_Expr:$collection->getSelect()->where(new Zend_Db_Expr("(CONDITION_1 OR (CONDITION_2 AND (CONDITION_3 OR CONDITION_4)))"));
ফিলিভিঙ্কল

আপনার উত্তরটির জন্য philwinkle.base ধন্যবাদ, এইটি নমুনা আমি অ্যাডগ্রিবিউটটোফিল্টার এবং এবং এবং ওআর শর্তটি দিয়ে কী করেছি: পেস্টবিন.
অন্ধি ইরাওয়ান

কোন বৈশিষ্ট্য কোনও ফল উত্পন্ন করেছে তা নির্ধারণ করার কোনও উপায় আছে? আমি তিনটি ক্ষেত্র জুড়ে একটি কাস্টম মডেল সংগ্রহ খুজছি ( name, altnernate_name, description) এবং যখন জানতে ফলে জন্যই চাই descriptionঅ্যাট্রিবিউট।
পিএসপাহ্ন

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, তবে আমার একেবারে বিপরীত প্রয়োজন, যেখানে হ'ল (শর্তাবলী এবং শর্তাবলী) বা (শর্তাবলী এবং শর্ত))), আপনি কি দয়া করে সহায়তা করতে পারেন
হারিস

1

অথবা শর্ত অ্যাডফিল্ডটোফিল্টার ব্যবহার করে


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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.