Что не так делаю при выборе строк за текущий месяц в Yii2?

Добрый День !
При таком SQL запросе прямо в phpMyAdmin, находится моя строка
SELECT * FROM `brk_image_post_upload`
WHERE date > LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
  AND date < DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY) AND juzer_id = 10;


Пытаюсь повторить этот же пример в Yii2:
$juzer_photo = $this->find()->where(['juzer_id' => 10])
                       ->andWhere(['>', 'date', 'LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH'])
                       ->andWhere(['<', 'date', 'DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY)'])
                       ->one();


Такой вариант тоже не помогает
//->andWhere('date > :date1',[':date1' => 'LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH'])
//->andWhere('date < :date2',[':date2' => 'DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY)'])


В итоге ничего не находит, пусто.
В чем магия ?
  • Вопрос задан
  • 1949 просмотров
Решения вопроса 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
1 что надо понять, это в каком формате дата в базе. Если в виде даты, а не числа, то mysql так:
WHERE MONTH(`date`) = MONTH(NOW()) AND YEAR(`date`) = YEAR(NOW())

А в yii2 используя AR, видимо так (но стоит проверить):
SomeModel::find()->andWhere("MONTH(`date`) = MONTH(NOW()) AND YEAR(`date`) = YEAR(NOW())")->all();
Ответ написан
@PRC Автор вопроса
Благодаря помощи Максим Тимофеев
Мой код в Yii2 в итоге получился такой:
$juzer_photo = $this->find()->where(['juzer_id' => 10])
                       ->andWhere(['>', 'date', new Expression('LAST_DAY(CURDATE()) + INTERVAL 1 DAY - INTERVAL 1 MONTH') ])
                       ->andWhere(['<', 'date', new Expression('DATE_ADD(LAST_DAY(CURDATE()), INTERVAL 1 DAY)') ])
                       ->one();


В сомом верху файла не забудьте добавить use yii\db\Expression;
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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