ম্যাগন্টো সংগ্রহের বেলো পৃথকীকরণের দুটি পদ্ধতি রয়েছে
- Varien_Data_Collection_Db :: addFieldToFilter
addFieldToFilter ($ ক্ষেত্র, $ শর্ত = নাল)
প্রথম প্যারামিটার addFieldToFilter
হল সেই বৈশিষ্ট্যটি যা আপনি দ্বারা ফিল্টার করতে চান। দ্বিতীয়টি হ'ল আপনি যে মানটি সন্ধান করছেন তা। এখানে আমরা sku
মানটির জন্য একটি ফিল্টার যুক্ত করছি n2610
।
আপনি যে ফিল্টারিং করতে চান তা নির্দিষ্ট করতে দ্বিতীয় প্যারামিটারও ব্যবহার করা যেতে পারে। এখানেই জিনিসগুলি কিছুটা জটিল হয়ে ওঠে এবং আরও কিছুটা গভীরতার সাথে worthোকা যায়।
সুতরাং ডিফল্টরূপে, নিম্নলিখিত
$collection_of_products->addFieldToFilter('sku','n2610');
(মূলত) এর সমতুল্য
WHERE sku = "n2610"
নিজের জন্য একটু দেখে যাও. নিম্নলিখিত চলমান
public function testAction()
{
var_dump(
(string)
Mage::getModel('catalog/product')
->getCollection()
->addFieldToFilter('sku','n2610')
->getSelect());
}
ফলন হবে
SELECT `e`.* FROM `catalog_product_entity` AS `e` WHERE (e.sku = 'n2610')'
মনে রাখবেন, আপনি যদি EAV বৈশিষ্ট্যটি ব্যবহার করেন তবে এটি দ্রুত জটিল হয়ে উঠতে পারে। একটি বৈশিষ্ট্য যুক্ত করুন
var_dump(
(string)
Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addFieldToFilter('meta_title','my title')
->getSelect()
);
এবং ক্যোয়ারী চমকপ্রদ হয়ে ওঠে।
SELECT `e`.*, IF(_table_meta_title.value_id>0, _table_meta_title.value, _table_meta_title_default.value) AS `meta_title`
FROM `catalog_product_entity` AS `e`
INNER JOIN `catalog_product_entity_varchar` AS `_table_meta_title_default`
ON (_table_meta_title_default.entity_id = e.entity_id) AND (_table_meta_title_default.attribute_id='103')
AND _table_meta_title_default.store_id=0
LEFT JOIN `catalog_product_entity_varchar` AS `_table_meta_title`
ON (_table_meta_title.entity_id = e.entity_id) AND (_table_meta_title.attribute_id='103')
AND (_table_meta_title.store_id='1')
WHERE (IF(_table_meta_title.value_id>0, _table_meta_title.value, _table_meta_title_default.value) = 'my title')
বিন্দুটি বেলবোর করার জন্য নয়, তবে আপনি যদি সময়সীমাতে থাকেন তবে এসকিউএল সম্পর্কে খুব বেশি চিন্তা করার চেষ্টা করবেন না।
অন্যান্য তুলনা অপারেটরগণ আমি নিশ্চিত আপনি ভাবছেন যে "যদি আমি কোয়েরির সমতুল্য ব্যতীত অন্য কিছু চাই"? সমান নয়, এর চেয়ে কম, ইত্যাদি The অ্যাডফিল্ডটোফিল্টার পদ্ধতির দ্বিতীয় প্যারামিটারটি আপনি সেখানে coveredেকে রেখেছেন। এটি একটি বিকল্প বাক্য গঠন সমর্থন করে যেখানে স্ট্রিংয়ের পরিবর্তে, আপনি একটি একক উপাদান অ্যারে পাস করেন।
আপনি যে তুলনা করতে চান তা এই অ্যারের কীটি। এই কীটির সাথে সম্পর্কিত মানটি সেই মানটি যা আপনি ফিল্টার করতে চান। উপরের ফিল্টারটি আবার করুন, তবে এই স্পষ্ট বাক্য গঠন দিয়ে with
public function testAction()
{
var_dump(
(string)
Mage::getModel('catalog/product')
->getCollection()
->addFieldToFilter('sku',array('eq'=>'n2610'))
->getSelect()
);
}
আমাদের ফিল্টার কল করছে
addFieldToFilter('sku',array('eq'=>'n2610'))
আপনি দেখতে পাচ্ছেন, দ্বিতীয় প্যারামিটারটি পিএইচপি অ্যারে। এর কীটি একা, যা সমান। এই কীটির মান n2610, যা আমরা ফিল্টার করছি এমন মান।
ম্যাজেন্টোর এমন অনেকগুলি ইংরাজী ভাষা রয়েছে যেমন ফিল্টার যা শ্রোতাদের যে কোনও পুরানো পার্ল বিকাশকারীকে স্মরণ করার টিয়ার (এবং সম্ভবত ব্যথা) নিয়ে আসবে।
নীচে তালিকাভুক্ত সমস্ত ফিল্টার রয়েছে তাদের এসকিউএল সমতলের উদাহরণ সহ।
array("eq"=>'n2610')
WHERE (e.sku = 'n2610')
array("neq"=>'n2610')
WHERE (e.sku != 'n2610')
array("like"=>'n2610')
WHERE (e.sku like 'n2610')
array("nlike"=>'n2610')
WHERE (e.sku not like 'n2610')
array("is"=>'n2610')
WHERE (e.sku is 'n2610')
array("in"=>array('n2610'))
WHERE (e.sku in ('n2610'))
array("nin"=>array('n2610'))
WHERE (e.sku not in ('n2610'))
array("notnull"=>'n2610')
WHERE (e.sku is NOT NULL)
array("null"=>'n2610')
WHERE (e.sku is NULL)
array("gt"=>'n2610')
WHERE (e.sku > 'n2610')
array("lt"=>'n2610')
WHERE (e.sku < 'n2610')
array("gteq"=>'n2610')
WHERE (e.sku >= 'n2610')
array("moreq"=>'n2610') //a weird, second way to do greater than equal
WHERE (e.sku >= 'n2610')
array("lteq"=>'n2610')
WHERE (e.sku <= 'n2610')
array("finset"=>array('n2610'))
WHERE (find_in_set('n2610',e.sku))
array('from'=>'10','to'=>'20')
WHERE e.sku >= '10' and e.sku <= '20'
এগুলির বেশিরভাগ স্ব-বর্ণনামূলক, তবে কয়েকটি একটি বিশেষ কলআউট প্রাপ্য
ইন, নিন, সন্ধান_ইন_সেট ইন এবং নিন শর্তাদি আপনাকে মানগুলির একটি অ্যারেতে যেতে দেয়। অর্থাৎ, আপনার ফিল্টার অ্যারের মান অংশটি নিজেই অ্যারে হিসাবে অনুমোদিত।
array("in"=>array('n2610','ABC123')
WHERE (e.sku in ('n2610','ABC123'))
notnull, null মূল শব্দটি এনকিউএল এসকিউএল এর বেশিরভাগ স্বাদে বিশেষ। এটি সাধারণত স্ট্যান্ডার্ড সমতা (=) অপারেটরের সাথে দুর্দান্ত খেলবে না। আপনার ফিল্টার প্রকার হিসাবে নোটনাল বা নাল উল্লেখ করা আপনাকে কোনও নাল তুলনার জন্য সঠিক বাক্য গঠন দেবে এবং আপনি যে কোনও মান পাস করলে তা উপেক্ষা করবেন না
array("notnull"=>'n2610')
WHERE (e.sku is NOT NULL)
থেকে - ফিল্টার করতে এটি আরও একটি বিশেষ ফর্ম্যাট যা মানক নিয়মকে ভেঙে দেয়। একটি একক উপাদান অ্যারের পরিবর্তে, আপনি একটি দুটি উপাদান অ্যারে নির্দিষ্ট করুন। একটি উপাদান থেকে চাবি রয়েছে, অন্য উপাদানটির কী রয়েছে। কীগুলি নির্দেশিত হিসাবে, এই ফিল্টারটি আপনাকে চিহ্নগুলির চেয়ে বেশি এবং কম সম্পর্কে চিন্তা না করেই / থেকে একটি পরিসীমা নির্মান করতে দেয়
public function testAction
{
var_dump(
(string)
Mage::getModel('catalog/product')
->getCollection()
->addFieldToFilter('price',array('from'=>'10','to'=>'20'))
->getSelect()
);
}
উপরের ফলন
WHERE (_table_price.value >= '10' and _table_price.value <= '20')'
এবং বা ওআর, বা এটি ওআর এবং এন্ড? অবশেষে, আমরা বুলিয়ান অপারেটরদের কাছে আসি। এটি বিরল মুহুর্ত যেখানে আমরা কেবল একটি বৈশিষ্ট্য দ্বারা ফিল্টার করছি। ভাগ্যক্রমে, ম্যাজেন্টোর সংগ্রহগুলি আমাদের কভার করেছে। সংখ্যক “এবং” কোয়েরি পেতে আপনি অ্যাডফিল্ডটোফিল্টারে একাধিক কল চেইন করতে পারেন।
function testAction()
{
echo(
(string)
Mage::getModel('catalog/product')
->getCollection()
->addFieldToFilter('sku',array('like'=>'a%'))
->addFieldToFilter('sku',array('like'=>'b%'))
->getSelect()
);
}
উপরের মত একাধিক কল এক সাথে শৃঙ্খলাবদ্ধ করে আমরা এমন একটি ক্লজ তৈরি করব যা নীচের মত দেখতে কিছু দেখায়
WHERE (e.sku like 'a%') AND (e.sku like 'b%')
আপনারা যারা সবেমাত্র আপনার হাত তুলেছেন তাদের কাছে হ্যাঁ, উপরের উদাহরণটি সর্বদা 0 টি রেকর্ড ফিরিয়ে আনবে। কোনও স্ক এবং দু'এই এবং এ-বি দিয়ে শুরু করা যাবে না। আমরা সম্ভবত এখানে যা চাই তা হল একটি ওআর ক্যোরি। এটি আমাদেরকে অ্যাডফিল্ডটোফিল্টারের দ্বিতীয় প্যারামিটারের বিভ্রান্তিকর দিকটিতে নিয়ে আসে।
আপনি যদি একটি ওআর ক্যোয়ারী তৈরি করতে চান তবে আপনাকে দ্বিতীয় প্যারামিটার হিসাবে ফিল্টার অ্যারের একটি অ্যারে পাস করতে হবে। আপনার পৃথক ফিল্টার অ্যারেগুলি ভেরিয়েবলগুলিতে নির্ধারণ করা ভাল বলে মনে করি
public function testAction()
{
$filter_a = array('like'=>'a%');
$filter_b = array('like'=>'b%');
}
এবং তারপরে আমার সমস্ত ফিল্টার ভেরিয়েবলের একটি অ্যারের বরাদ্দ করুন
public function testAction()
{
$filter_a = array('like'=>'a%');
$filter_b = array('like'=>'b%');
echo(
(string)
Mage::getModel('catalog/product')
->getCollection()
->addFieldToFilter('sku',array($filter_a,$filter_b))
->getSelect()
);
}
সুস্পষ্ট হওয়ার স্বার্থে, ফিল্টার অ্যারেগুলির পূর্ব বর্ণিত অ্যারেটি এখানে।
array($filter_a,$filter_b)
এটি আমাদেরকে এমন একটি ক্লিউজ দেবে যা নীচের মত কিছু দেখাচ্ছে
WHERE (((e.sku like 'a%') or (e.sku like 'b%')))
- Varien_Data_Collection :: addFilter
addFilter($field, $value, $type = 'and')
addFilter()
কেবলমাত্র একটি একক ক্ষেত্রকে একটি একক মান এবং একটি ধরণের দ্বারা ফিল্টার করার অনুমতি দেয়। $type
যে কোনও হতে পারে:
- "এবং" (ডিফল্ট) - WHERE ধারাটিতে AND $ ক্ষেত্র = $ মান যুক্ত করে
- "বা" - WHERE ধারাটিতে "OR $ ক্ষেত্র = $ মান যুক্ত করে
আরও বিশদ দেখুন
addFilter
দিয়েattributes
?