আপনার পছন্দের ক্যোয়ারী তৈরি করতে আপনার এই কৌশলগুলির বেশিরভাগটি একত্রিত করতে সক্ষম হওয়া উচিত। বিক্রয় টেবিলগুলির জন্য, আপনি সম্ভবত ব্যবহার করবেন 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