2016-12-24 12 views
0


Yii2でREST APIを開発しています。検索クエリでこれを達成したいYii2検索で一致する配列インデックス値を比較する

WHERE ((`variant_name` LIKE '%size%' AND `variant_value` 
LIKE '%12%') OR (`variant_name` LIKE '%color%' AND `variant_value` LIKE '%12%')) 

variant_nameとvariant_valueは、URLで送信される配列です。

次のSQL

AND ((`variant_name` LIKE '%size%' OR .`variant_name` LIKE '%color%') 
OR (`variant_value` LIKE '%13%' OR `variant_value` LIKE '%56%'))) 

を生成するが、私はvaraint_name [0]とvaraint_valueを望んれ

$query->andFilterWhere(['or', 
['or like', 'pvo.variant_name', $this->variant_name], 
['or like', 'pvo.variant_value', $this->variant_value]]) 
->groupBy(['pvo.product_variant_id']) 
->having(['count(product_variant_id)' => count($this->variant_name)]); 
     ; 

を次のように私が今使っている corrsponding Yii2コードは[0]シングルブラケットに有します上記のようにvaraint_name [1]とvaraint_value [1]で条件を指定します。 Yii2でどうすればいいですか?

アップデート1 サンプルURL http://localhost:8080/online-malls/api/web/v1/products?expand=product_variant_options&variant_name[0]=size&variant_value[0]=13&variant_name[1]=color&variant_value[1]=56

+0

どちらにありますURLで送信? ..あなたの質問を更新してくださいあなたのURLのサンプルを追加するか、URLのparamを構成するqayを追加してください。 – scaisEdge

+0

@scaisEdge応答に感謝します。私は質問を更新しました – james

+1

私はあなたが探しているものを掲示し、希望に答える – scaisEdge

答えて

1

あなたが得るの配列を使用しているなら、あなたはのparamなどで配列値を使用する必要があります。VARIANT_NAMEとvariant_valueをWYA

$query->andFilterWhere(['or', 
    ['or like', 'pvo.variant_name', $this->variant_name[0]], 
    ['or like', 'pvo.variant_value', $this->variant_value[0]], 
    ['or like', 'pvo.variant_name', $this->variant_name[1]], 
    ['or like', 'pvo.variant_value', $this->variant_value[1]], 
    ]) 
    ->groupBy(['pvo.product_variant_id']) 
    ->having(['count(product_variant_id)' => count($this->variant_name)]); 
+0

+1答えをありがとう。しかし、配列の長さを事前に知っていないとどうなりますか?私はこれをループする必要がありますか?またはその他の回避策があります。 – james

+0

私にとって簡単な方法は、ポーパーフィルタ条件を準備するためのループの使用です。 – scaisEdge

+0

もう一度ありがとう。 4つ目のOR演算子が構文エラーを生成しています。あなたもそれを修正していただけますか? – james

関連する問題