Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2查询或条件1列的多个值_Php_Sql_Yii2 - Fatal编程技术网

Php Yii2查询或条件1列的多个值

Php Yii2查询或条件1列的多个值,php,sql,yii2,Php,Sql,Yii2,我已经用Yii2框架制作了一个API。 但我不知道如何在我的陈述中使用OR条件 例如: 我想买所有宝马或道奇品牌的车 我尝试了以下方法: $query = Car::getCar($lang) ->where(['or', ['m.brand' => 'BMW'], ['m.brand' => 'DODGE']]) ->all(); 但这不起作用。 对于m.brand来说,我只有一个价值 因此: 很好用 我试着用一些其他的方法,但是我

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

例如: 我想买所有宝马或道奇品牌的车

我尝试了以下方法:

$query = Car::getCar($lang)
         ->where(['or', ['m.brand' => 'BMW'], ['m.brand' => 'DODGE']])
         ->all();
但这不起作用。 对于m.brand来说,我只有一个价值

因此:

很好用

我试着用一些其他的方法,但是我没有成功。
有人知道我做错了什么吗

编辑 getCar方法返回如下内容:

(new Query())->select(['a.auto_id'])->from('auto_new a') 
编辑2 让它工作:

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

如果我能很好地理解您,您可以使用以下内容:

Model::find()
             ->orWhere(['brand' => 'brand1'])
             ->orWhere(['id' => 'brand2'])
             ->all();
where()
可以使用数组沿

SELECT * FROM car WHERE brand in ('brand1', 'brand2');
使用此结构,您可以生成希望返回的品牌数组,然后使用以下ActiveQuery

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

通过使用具有所需值的数组,您实际上可以将其简化很多:

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

这将使用类似于
WHERE m.brand IN('BMW','DODGE')
的方法执行,该方法返回您要查找的结果。

只要static方法
getCar()
返回
ActiveQuery
实例,该方法就可以工作。@Bizley我已经添加了getCar返回的内容。我不认为这是个问题,因为单个列的单个where参数可以很好地工作。这很奇怪,它应该可以工作。你说的“我不能让它工作”是什么意思?是否有任何错误或您只是看不到预期的结果?请使用
或替换
->all()来测试此版本
->createCommand()->rawSql并检查输出。它只返回所有BMW的结果。您可以粘贴此输出的结果吗?我已将where替换为orWhere,但它仍然只返回BMW的only。
$query = Car::getCar($lang)
    ->where(['m.brand' => ['BMW', 'DODGE']])
    ->all();