Yii2 запрос ИЛИ условие нескольких значений для 1 столбца

Я сделал API с фреймворком Yii2.
Но я не знаю, как использовать условие ИЛИ в моем утверждении.

Например:
Я хочу приобрести все автомобили с маркой 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

Решение

Если я вас хорошо понимаю, вы можете использовать что-то вроде этого:

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

Другие решения

Вы можете существенно упростить это, используя массив со значениями, которые вам нужны:

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

Это будет выполнено с чем-то вроде WHERE m.brand IN ('BMW', 'DODGE') который возвращает результат, который вы ищете.

2

where() может взять массив для создания sql по линии

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

Используя эту конструкцию, вы можете создать массив брендов, которые вы хотите вернуть, а затем использовать следующий ActiveQuery.

$brands = ['BMW', 'DODGE'];
$query = Car::find()->where(['brand' => $brands])->all();
1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector