@MarkLb

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

Задача: Необходимо получить число записей за текущие сутки, которые имеют определенную ссылку или 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 решить
  • Вопрос задан
  • 326 просмотров
Решения вопроса 2
@sidni
Php Developer
Order::find()->where('date > UNIX_TIMESTAMP(CURDATE())')
  ->andWhere(['OR',
              ['link' => $link],
              ['email' => $email]
  ])
  ->count();
Ответ написан
Комментировать
@MarkLb Автор вопроса
Order::find()
    ->andWhere('date > UNIX_TIMESTAMP(CURDATE())')
    ->andWhere(['or', ['link' => $link], ['email' => $email]])
    ->count();


Спасибо, Дмитрий Елисеев!
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы