0

ajax 関連の magento 検索を実行しようとしていますが、複数選択タイプの製品属性を製品コレクションに正しく追加できません。たとえば、次のようになります。

$productModel = Mage::getModel('catalog/product'); //getting product model
$productCollection = $productModel->getCollection();
$productCollection->addAttributeToSelect(
                        Mage::getSingleton('catalog/config')
                            ->getProductAttributes()
                    );
$productCollection->addAttributeToFilter(
             array(
                  array('attribute'=>'my_attribute_id', 
                          'finset' => Mage::getResourceModel('catalog/product')
                                        ->getAttribute('my_attribute_id')          
                                        ->getSource()
                                       ->getOptionId($searched))
                    );

$searched は、キーワードを保存する文字列です。ここで、my_attribute_id が「Red Bull」という名前の 1 つのオプションを持つ複数選択の製品属性であると仮定しましょう...正確な文字列「red Bull」の後に検索すると機能しますが、検索すると機能したいと思います「赤」または「雄牛」の後のみ。検索文字列が不完全な場合でも、属性のオプション ID を取得する方法はありますか? 問題はここにあるため:

 Mage::getResourceModel('catalog/product')
                        ->getAttribute('my_attribute_id')
                        ->getSource()
                        ->getOptionId($searched))

このコードは、完全に検索した場合にのみ、属性オプションの ID を返します。おそらく、モデルはこのようなクエリを実行します

"select...where value='$searched'"

オプションの値が完全でない場合でも、属性オプション ID のリストを取得する方法はありますか?..だから、このようなクエリを実行するには

"select...where value like '%$searched%'"

または、私が試しているソリューション以外に、複数選択属性の部分値の後に製品コレクションを取得するより良い方法はありますか? どうもありがとう!

4

1 に答える 1

0

これを試してください..

$collection = Mage::getModel('catalog/product')->getCollection();
    ->addAttributeToSelect('*')
    ->addFieldToFilter(
        'my_attribute_id',
        array(
            'like' => Mage::getResourceModel('catalog/product')
                        ->getAttribute('my_attribute_id')
                        ->getSource()
                        ->getOptionId($searched)
        )
    );
于 2013-02-12T11:21:28.553 に答える