Как отделить where() и andWhere() condition в ActiveRecord Yii2?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
MarkL
Сообщения: 68
Зарегистрирован: 2017.07.05, 20:37

Как отделить where() и andWhere() condition в ActiveRecord Yii2?

Сообщение MarkL »

Задача: Необходимо получить число записей за текущие сутки, которые имеют определенную ссылку или email.

Проблема: ActiveRecord объединяет where и andWhere() в одно условие. Выходит: "Получить все записи, которые сделаны сегодня и имеют ссылку $link ИЛИ записи с $email" вместо "Получить все записи за сегодня, которые имеют $link или $email".

В AR имею следующую конструкцию:

Код: Выделить всё

Order::find()->where('date > UNIX_TIMESTAMP(CURDATE())')
	->andWhere(['link' => $link])
	->orWhere(['email' => $email])
	->count();
На выходе получаю следующий SQL-запрос:

Код: Выделить всё

SELECT COUNT(*) FROM `order` WHERE ((date > UNIX_TIMESTAMP(CURDATE())) AND (`link`='somelink')) OR (`email`='limit@gmail.com')'
Вопрос: Как заставить ActiveRecord разделить условия where и andWhere?
inb4: Понимаю, что можно с помощью findBySql() решить задачу, хочу уточнить можно ли с ActiveQuery решить
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как отделить where() и andWhere() condition в ActiveRecord Yii2?

Сообщение ElisDN »

Код: Выделить всё

Order::find()
    ->andWhere('date > UNIX_TIMESTAMP(CURDATE())')
    ->andWhere(['or', ['link' => $link], ['email' => $email]])
    ->count();
Аватара пользователя
MarkL
Сообщения: 68
Зарегистрирован: 2017.07.05, 20:37

Re: Как отделить where() и andWhere() condition в ActiveRecord Yii2?

Сообщение MarkL »

ElisDN писал(а): 2021.02.23, 15:23

Код: Выделить всё

Order::find()
    ->andWhere('date > UNIX_TIMESTAMP(CURDATE())')
    ->andWhere(['or', ['link' => $link], ['email' => $email]])
    ->count();
Спасибо, Дмитрий, завелось!
Ответить