0

addFieldToFilter と addAttributeToFilter を使用して、Magento で AND および OR ブール条件を実行できます。

しかし、私は以下のようなより複雑なブール条件を実装することに興味があります:

WHERE (`sku > 5` AND `price` > '10') OR (`name` = 'books')

AND条件の場合、私は持っています

$collections = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('*')
->addFieldToFilter( 'sku', array('gt' => 5 )
->addFieldToFilter('price', array('gt' => 10);

これは、WHERE 条件の最初の括弧に変換されます。

(`sku` > 5 AND `price` > 10)

ここからOR条件を表現する方法がわからない

`name` = 'books'

どんな助けでも大歓迎です。ありがとう

4

1 に答える 1

-1

私の以前の投稿を参照してください。

Magento の複雑なブール条件

配列を渡すことで OR を作成できます。

Mage::getModel('catalog/product')
->getCollection()
->addFieldToFilter('price', array('gt' => 10))
->addAttributeToFilter(
    array(
        array('attribute'=>'firstname', 'like'=>'test%'),
        array('attribute'=>'lastname', 'like'=>'test%'),
    )
)

addAttributeToFilter() への追加の各呼び出しは AND になりますが、名 / 姓は OR になります。

より複雑な select ステートメントが必要な場合は、いつでもコレクションから select オブジェクトを取得し、クエリを調整できます。ヒントについては Varien_Db_Select を見てください:)

$collection->getSelect()->join(..)->orWhere(..);  // etc

クエリをデバッグして、問題がないかどうかを確認することもできます。

echo $collection->getSelect()->__toString();
于 2012-09-19T09:54:14.090 に答える