我使用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']])
答案 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()
可以使用数组来创建
SELECT * FROM car WHERE brand in ('brand1', 'brand2');
使用此构造,您可以生成要返回的品牌数组,然后使用以下ActiveQuery。
$brands = ['BMW', 'DODGE'];
$query = Car::find()->where(['brand' => $brands])->all();