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);
Это исключение 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 .
в выражении и интерпретировать часть после нее как идентификатор столбца – не использовать .
в вашем выражении, и все должно быть в порядке.