2011-02-04 4 views
1

Magentoで特定の価格帯の製品を取得しようとしています。私が考えることができる最初の2つの論理的な方法を試しました。まず、2つのaddAttributeToFilter()ステートメントを自分のコードに追加します。Magentoコレクションのsingel属性に2つの条件を適用する

$products->addAttributeToFilter('price', array('gteq' => $r['price_low'])); 
$products->addAttributeToFilter('price', array('lteq' => $r['price_high'])); 

ダイスはありません。これはちょうど私に2番目を与えました。再び

$price_array['gteq'] = $r['price_low']; 
$price_array['lteq'] = $r['price_high']; 
$products->addAttributeToFilter('price', $price_array); 

ちょうどハイエンド:私はこのような)(シングルaddAttributeToFilterに両方の条件文を追加しましたを試してみることにしたものを次に

。私は自分のコレクションでgetSelect()を行い、それがハイエンドのみを適用していることをクエリで確認しました。

価格帯のある商品をどのように入手できるかは誰にも分かります。

答えて

1

は、私がこの仕事をするために行うためになってしまったものです(感謝アランストーム! - Magentoのウェブサイト上の彼のガイドにあります)。

if($has_low_price && $has_high_price) { 
    $products->addFieldToFilter('price', array('gteq' => $r['price_low'])); 
    $products->addFieldToFilter('price', array('lteq' => $r['price_high'])); 
} elseif($has_high_price) { 
    $products->addAttributeToFilter('price', array('lteq' => $r['price_high'])); 
} elseif($has_low_price) { 
    $products->addAttributeToFilter('price', array('gteq' => $r['price_low'])); 
} else { 

} 

ANDを実行する場合は、addAttributeToFilterではなくaddFieldToFilterを使用する必要があります。

0

あなたはほぼあります。あなたが探している構文は次のとおりです:

$filter = array(
    array("gteq" => $r['price_low']), 
    array("lteq" => $r['price_high']), 
); 

$products->addAttributeToFilter("price", $filter); 

これはあまり直感的ではありませんが動作します。

希望に役立ちます!

おかげで、 ジョーここ

関連する問題