Yii2查询OR条件为1列

时间:2017-01-20 13:02:12

标签: php sql yii2

我使用Yii2框架制作了一个API。 但我不知道如何在我的陈述中使用OR条件。

例如: 我希望所有车型都配备BMW或DODGE品牌。

我尝试了以下内容:

$query = Car::getCar($lang)
         ->where(['or', ['m.brand' => 'BMW'], ['m.brand' => 'DODGE']])
         ->all();

但这不起作用。 我只能使用m.brand的一个值。

所以:

$query = Car::getCar($lang)
         ->where(['m.brand' => 'BMW'])
         ->all();

工作得很好。

试图采取其他一些方式,但我不能让它发挥作用 有谁知道我做错了什么?

修改 getCar方法返回类似于:

的内容
(new Query())->select(['a.auto_id'])->from('auto_new a') 

编辑2 得到了它:

$query->andWhere(['or', ['m.brand' => 'BMW'], ['m.brand' => 'DODGE']])

3 个答案:

答案 0 :(得分:3)

如果我理解你,你可以使用这样的东西:

Model::find()->orWhere(['brand' => 'brand1])
             ->orWhere(['id' => 'brand2'])->all();

答案 1 :(得分:2)

通过使用具有所需值的数组,您实际上可以大大简化它:

$query = Car::getCar($lang)
    ->where(['m.brand' => ['BMW', 'DODGE']])
    ->all();

这将执行WHERE m.brand IN ('BMW', 'DODGE')之类的内容,返回您要查找的结果。

答案 2 :(得分:1)

where()可以使用数组来创建

行的SQL
SELECT * FROM car WHERE brand in ('brand1', 'brand2');

使用此构造,您可以生成要返回的品牌数组,然后使用以下ActiveQuery。

$brands = ['BMW', 'DODGE'];
$query = Car::find()->where(['brand' => $brands])->all();