1

基本的なレベルで実行できるMagentoコレクションに複数のフィルターを追加しようとしています。私が本当にやりたいのは、任意のレベルの深さである可能性のあるいくつかのネストされたフィルターによってコレクションをフィルターできるようにすることです。たとえば、次のようなコードを使用して複数のフィルターを追加できることを知っています。

$collection->addAttributeToFilter('example_attribute', array('eq' => 1));

私ができるようにしたいのは、相互にネストできるフィルター(AND&OR)を用意することです。Magentoコレクションでこれが可能かどうかはわかりませんが、オンラインで例を見つけることができませんでした。

詳細と例を示すために:同等のSQL(必要な選択されたフィールドとJOINSを無視する)が次のようになるコレクションをフィルター処理する必要があります。

SELECT .........

WHERE 

(attribute1 = 1
OR 
atttribute2 = 'yes')

AND
qty > 5

AND(
  (attribute3 != 'no'
  AND 
  attribute4 = 50 )
  OR
  (attribute3 != 'no'
  AND 
  attribute6 > 50 )
  )

これは簡単な大まかな例ですが、基本的な問題は、任意の数のフィルターをネストする方法です。

4

1 に答える 1

0

次のようなコードを使用して OR 条件付けを使用できます。

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

編集:これを使用すると、クエリで少なくとも AND および OR 条件付けを実行できるはずです。標準的な動作では、ネストされた AND OR 条件付けが許可されていないようです。したがって、そのためのカスタムクエリを作成する必要があると思います。詳細については、メソッド addAttributeToFilter が定義されているファイル Mage_Eav_Model_Entity_Collection_Abstract を確認してください。

于 2013-01-02T13:59:12.900 に答える