использовать поле как рекурсивную функцию в условии where в yii2 - PullRequest
0 голосов
/ 31 мая 2018

Я хочу отправить содержимое функции date1 в exp в , где () условие и вернуть результат.

Примечание: На самом деле я хочуЧтобы сравнить две даты, мне нужно изменить одну из дат для взрыва

Вот мой код:

function exp($date){
            $date = explode('/', $date);
            $Y = $date[0];
            $m = $date[1];
            $d = $date[2];

            return $Y;
        }

$promise = new ActiveDataProvider([
            'query' => Post::find()
            ->where('status = "show"')
            ->andWhere(['<=', exp('date1'), 'date2'])// date1is: 2018/02/03
            ->orderBy('id'),
            ]);

Есть ли еще способ сделать это?

1 Ответ

0 голосов
/ 01 июня 2018

exp - это функция PHP, в andWhere вы подготавливаете запрос SQL, который будет выполняться на сервере SQL.Анализатор SQL на сервере SQL не может выполнять функции PHP.Вы должны использовать функцию MySQL DATE_FORMAT здесь:

$promise = new ActiveDataProvider([
      'query' => Post::find()
         ->where('status = "show"')
         ->andWhere(['<=', 'DATE_FORMAT(date1, "%Y")', 'date2'])
      ->orderBy('id'),
   ]);

Пожалуйста, измените названия полей date1 и date2, чтобы сделать их более информативными.Напримерorder_date, delivery_date и т. Д.

Если в вашем коде часто используются значения status, их следует заменить константами класса Post.

Если date2 содержит только значения года, лучше использовать тип YEAR .

...