2012-12-27 41 views
4

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:

我想過濾查找W¯¯/con使用關係表(多對多)。 因此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); 
+2

當'CDbCriteria :: $ select'是一個字符串時,Yii會在每個逗號上分割它。嘗試傳遞這個表達式作爲一個數組中的單個元素('$ criteria-> select = array('DATE_ADD(...)AS datetime_limit');'。 – DCoder

+0

@DCoder謝謝它的工作! –

+0

@DCoder作爲請回答。:) – Leri

回答

4

這個例外引發CActiveFinder::getColumnSelect

CDbCriteria::$select是一個字符串時,它被視爲逗號分隔列的簡單列表。你的表達被解釋爲兩個不同的列。您可以解決這通過設置select到一個數組自己 - 在這種情況下逗號分割不這樣做:

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

請注意,如果你寫了一個別名,不符合公共模型屬性或一個數據庫字段,它將被檢索,但被默默忽略 - 出於某種原因,Yii不會爲此拋出異常。


但是,此功能將仍然試圖找到表達的.和解讀後的部分作爲列標識符 - 不使用你的表達.,你應該罰款。

+0

+1我希望OP會接受這個答案。 – Leri

+0

謝謝,它幫助了我很多!如果我想在$ criteria->條件中使用自定義字段'datetime_limit',我應該怎麼做?我得到'SQL:SQLSTATE [42S22]:列未找到:1054未知列'datetime_limit'在'where子句'。 –

+0

@LucianoNascimento:你的標準必須選擇一些別名爲'datetime_limit'的表達式,否則MySQL將不知道'datetime_limit'的意思是什麼...... – DCoder