商品コレクションをフィルタリングして、在庫のある商品のみを表示したいと思います。 'is_salable'という属性があり、在庫がある場合は1(true)、在庫がない場合は0(false)であるため、これは簡単だと思いました。しかし、私が何をしても、それは機能しません。さらに、クエリが終了する前に実行を停止しているようです。
サンプルコードは次のとおりです。
_$this->_productCollection = Mage::getModel('catalog/product')->getCollection();
$this->_productCollection->addAttributeToSelect('*');
$this->_productCollection->addAttributeToFilter('my_attribute', true);
//So far, so good...filtering on 'my_attribute' works!
Mage::Log("select: " . $this->_productCollection->getSelect());
//Successfully outputs the SQL query
$this->_productCollection->addFieldToFilter('is_salable', '1');
Mage::Log("select: " . $this->_productCollection->getSelect());
//does NOT output any query...it's like it died trying
_
だから私は何が間違っているのですか? 'addFieldToFilter'、 'addAttributeToFilter'、およびその他のクエリ(addFieldToFilter('is_salable', array('eq' => true))
など)を試しました。
誰もがこれを行う方法を知っていますか? 'is_salable'が答えではない場合、私がする必要があるのは、在庫のない製品を除外することだけです...したがって、それを行うために機能するものは何でも問題ありません:)
ありがとう!
製品にはis_salable
属性がないため、例外が発生します。在庫のある商品のみを表示する場合は、次の在庫モデルaddInStockFilterToCollection
メソッドを使用します。
Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($this->_productCollection);
IsSaleable()が製品で常にfalseを返すという問題に遭遇しました。問題は、コレクションを取得していたのに、コレクションに属性価格を追加しなかったということでした。 isSaleable()関数には、価格が0でないことを確認するためのチェックがあり、それをチェックするためにprice属性が必要です。
変化:
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name')
->addAttributeToSelect('image')
->addAttributeToSelect('url_path')
->addAttributeToSelect('status')
->addUrlRewrite();
に:
$collection = Mage::getModel('catalog/product')->getCollection();
$collection->addAttributeToSelect('name')
->addAttributeToSelect('image')
->addAttributeToSelect('price')
->addAttributeToSelect('url_path')
->addAttributeToSelect('status')
->addUrlRewrite();
トリックをしました:)
これも試してみてください...
$stockCollection = Mage::getModel('cataloginventory/stock_item')->getCollection()->addFieldToFilter('qty', array('gteq' => 1))->addFieldToFilter('type_id', 'simple');
addFieldFilter( 'qty'、array( 'gteq' => 1))
在庫が1以上のすべての商品コレクションを入手し、必要に応じてここに任意の数を入力できます
addFieldToFilter( 'type_id'、 'simple')
シンプルな製品でフィルタリング