Intereting Posts
Генерация и деление сетки с помощью css / js / php Невозможно отобразить изображение из таблицы MySQL. Получить контейнер обслуживания от объекта в symfony 2.1 (Doctrine) Любой способ указать дополнительные значения параметра в PHP? Невозможно вставить путь для нескольких изображений в таблице базы данных с помощью codeigniter Фильтрация XML-файла с помощью PHP Класс не найден Как заполнить второе раскрывающееся меню на основе выбора первого раскрывающегося списка с использованием jQuery / AJAX и PHP / MySQL? Каков наилучший способ сохранить переменные конфигурации в веб-приложении PHP? Альтернативный синтаксис для коммутатора OpenSSL не будет создавать закрытые ключи? как обеспечить ссылку для загрузки уже заархивированных файлов в php получение результатов поиска Google Доступ к переменной с использованием счетчика как части имени переменной Странная проблема автозагрузки PHP

Как использовать DATE_ADD в критериях Yii $?

Model.php

// Declare $datetime_limit public datetime_limit; 

controller.php

 // datetime_limit should be the actual datetime + 5 days $criteria->select="DATE_ADD(NOW(), INTERVAL 5 DAY) AS datetime_limit"; 

Сообщение об ошибке:

 Active record "Users" is trying to select an invalid column "DATE_ADD(NOW()". Note, the column must exist in the table or be an expression with alias. 

Изменить 1:

Я хотел бы отфильтровать поиск с условием, используя таблицу отношений (от многих до многих). Таким образом, datetime_limit не может иметь реляционных events.datetime . Как я могу это сделать?

 $criteria->select=array("DATE_ADD(NOW(), INTERVAL 5 DAY) AS datetime_limit"); $criteria->with=array('events'); $criteria->having='datetime_limit!=`events`.`datetime`'; $models=Users::model()->findAll($criteria); 

Related of "Как использовать DATE_ADD в критериях Yii $?"

Это исключение CActiveFinder::getColumnSelect в CActiveFinder::getColumnSelect .

Когда CDbCriteria::$select – это строка, он рассматривается как простой список столбцов с разделителями-запятыми. Ваше выражение интерпретируется как два разных столбца. Вы можете обойти это, установив самостоятельно select массива – в этом случае разделение запятой не выполняется 1 :

 $criteria = new CDbCriteria(); $criteria->select = array("DATE_ADD(NOW(), INTERVAL 5 DAY) AS datetime_limit"); $models = Users::model()->findAll($criteria); 

Обратите внимание: если вы пишете псевдоним, который не соответствует объекту публичной модели или поле БД, он будет извлечен, но будет игнорироваться без изменений – по какой-то причине Yii не генерирует для этого исключения.


1 Однако эта функция все равно попытается найти a . в выражении и интерпретировать часть после нее как идентификатор столбца – не использовать . в вашем выражении, и все должно быть в порядке.