Magentoコレクションの商品価格と販売価格を比較しようとしています。具体的には、販売価格が基本価格以上のすべての製品を検索しようとします。
addAttributeToFilter
論理的には、フィールド名を呼び出しに入れようとしました。
->addAttributeToFilter('special_price', array('gteq' => 'special_price'));
しかし、それはうまくいきませんでした。これを行うための良い方法はありますか?販売価格が基本価格以上であるかどうかを手動で確認するために、販売価格のあるすべての製品を入手する必要はありませんか?
解決
これは非常に奇妙で、Magentoコレクションが奇妙な場合があることを示しています。コールチェーンに入ったからといっ->addAttributeToSelect('price')
て、きちんとした方法で価格を取得できるわけではありません。だから私がしなければならなかったことは、クエリの他の部分でそれにアクセスできるように条件付きに入れられました。私はを選びました->addAttributeToFilter('price', array('gteq' => 0))
。私は特別価格で同じことをしなければなりませんでした。
それから、where条件を設定することになると、私はまだ簡単な名前の価格と特別価格にアクセスできなかったので、それらのテーブル値を使用する必要があったので、私のwhereステートメントは最終的に$products->getSelect()->where('_table_special_price.value >= _table_price.value');
結局、これは私のチェーン全体がどのように見えたかです(そこにはいくつかのカスタム属性があります):
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('id')
->addAttributeToSelect('name')
->addAttributeToSelect('price')
->addAttributeToSelect('special_price')
->addAttributeToFilter('price', array('gteq' => 0))
->addAttributeToFilter('special_price', array('gteq' => 0))
->addAttributeToFilter('visibility', 4)
->addAttributeToFilter('discontinued', array('neq' => 1))
->addAttributeToFilter('status', 1)
;
$ products-> getSelect()-> where(' _table_special_price
。value
>= _table_price
。value
');