web-dev-qa-db-ja.com

「is_salable」で商品コレクションをフィルタリングする

商品コレクションをフィルタリングして、在庫のある商品のみを表示したいと思います。 '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'が答えではない場合、私がする必要があるのは、在庫のない製品を除外することだけです...したがって、それを行うために機能するものは何でも問題ありません:)

ありがとう!

14
BrianVPS

製品にはis_salable属性がないため、例外が発生します。在庫のある商品のみを表示する場合は、次の在庫モデルaddInStockFilterToCollectionメソッドを使用します。

Mage::getSingleton('cataloginventory/stock')->addInStockFilterToCollection($this->_productCollection);
45
Ivan Chepurnyi

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();

トリックをしました:)

0
Thomas Lang

これも試してみてください...

$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')

シンプルな製品でフィルタリング

0