magento
コレクションをフィルタリングする方法
サーチ…
パラメーター
パラメータ | 詳細 |
---|---|
$ addFieldToFilter( $ field 、$ condition = null) | {string}フィルタに追加するフィールド。 |
$ addFieldToFilter($ field、 $ condition = null ) | {mixed}使用するフィルターの定義。 |
addAttributeToFilter( $ attr 、$ condition = null、$ join = 'inner') | {string}フィルタに追加するフィールド。 |
addAttributeToFilter($ attr、 $ condition = null 、$ join = 'inner') | {mixed}使用するフィルターの定義。 |
addAttributeToFilter($ attr、$ condition = null、 $ join = 'inner' ) | {( 'inner'、 'left')} EAV表に結合するときに使用するSQL結合のタイプ。 |
備考
フィルタ比較引数
Magentoは、比較演算子を使用してフィルタリングする柔軟な方法も提供します。有効な演算子とその構文のリストを次に示します。
すべての比較引数は、 addFieldToFielter()
またはaddAttributeToFilter()
メソッドの2番目のパラメータに渡すことができます。
$collection_of_products->addAttributeToFilter('visible',array("eq"=>1));
比較 | 引数配列 | 結果のSQLスニペット |
---|---|---|
等しい | array( "eq" => $ var) | WHERE( `my_field` = $ var) |
等しくない | array( "neq" => $ var) | WHERE( `my_field`!= $ var) |
好き | array( "like" => $ var) | WHERE( `my_field` LIKE $ var) |
みたいではなく | array( "nlike" => $ var) | WHERE( `my_field`は$ like LIKEではありません) |
は | array( "is" => $ var) | WHERE( `my_field` IS $ var) |
に | array( "in" => $ var) | WHERE( `my_field` IN($ var)) |
ありませんで | array( "nin" => $ var) | WHERE( `my_field` NOT IN($ var)) |
ヌル | array( "null" => true) | WHERE( `my_field`はNULLです) |
ヌルでない | array( "notnull" => true) | WHERE( `my_field`はNULLではありません) |
より大きい | array( "gt" => $ var) | WHERE( `my_field`> $ var) |
未満 | array( "lt" => $ var) | WHERE( `my_field` <$ var) |
より大きいまたは等しい | array( "gteq" => $ var) | WHERE( `my_field`> = $ var) |
より小さいか等しい | array( "lteq" => $ var) | WHERE( `my_field` <= $ var) |
セットで検索 | array( "finset" => array($ var)) | WHERE(find_in_set($ var、 `my_field`) |
出入国 | array( "from" => $ var1、 "to" => $ var2) | WHERE( `my_field`> = $ var1と` my_field` <= $ var2) |
コレクションのフィルタリング
Magentoには、コレクションをフィルタリングするための強力なメソッドセットがあります。コレクションに含めることができるオブジェクトには2つのタイプがあるので、フィルタリングする前にどのタイプのデータを扱っているのかをまず判断する必要があります。 Magentoは、製品やカテゴリなどのエンティティ用のEAVデータモデルを実装しています。 EAVオブジェクトのコレクションをフィルタリングする場合、使用する別の方法があります。
Magentoでは、注文はEAVオブジェクトとして保存されません。これにより、ordersコレクションは基本コレクションをフィルタリングする良い例になります。
$collection_of_orders = Mage::getModel('sales/order')->getCollection();
$collection_of_orders->addFieldToFilter('status','processing');
製品コレクションを見ると、製品がEAVデータモデルに格納されていることがわかります。 EAV属性でも簡単にフィルタリングできます。
$collection_of_products = Mage::getModel('catalog/product')->getCollection();
$collection_of_products->addAttributeToFilter('visible',1);
フィルターでのANDおよびORの処理
データを照会する際には、探しているデータセットを取得するために複数のフィルターが必要になることがよくあります。 SQLでは、これをAND句またはOR句で処理します。コレクションでも同じことができます。
クエリにAND句を追加するには、単に別のメソッド呼び出しを追加するだけです。これは、元のWHEREステートメントに2番目のフィルターをANDで追加します。
Mage::getModel('catalog/product')->getCollection()
->addFieldToFilter('sku',array('like'=>'a%'))
->addFieldToFilter('sku',array('like'=>'%b'));
結果のWHERE句は次のようになります。
WHERE (e.sku like 'a%') AND (e.sku like '%b')
今度は、「a」ORで始まるすべてのスキューが「b」で始まるとします。 OR節を追加するには? Magentoのコレクションのおかげで、それはかなり簡単です。フィルタ配列の2番目の要素としてフィルタを追加します。
Mage::getModel('catalog/product')->getCollection()
->addFieldToFilter('sku', array(
array('like'=>'a%'),
array('like'=>'%b')
));
さて、結果として得られるWHERE句は次のようになります:
WHERE (((e.sku like 'a%') or (e.sku like '%b')))