CDBCriteria中SELECT的绑定参数


Binding parameters for SELECT in CDBCriteria

我正在使用Yii CDBCriteria查找记录。

我必须在"SELECT"中放入一个字符串值作为自定义列,如下所示:

$criteria = new CDbCriteria;
$criteria->select = array('*, DATE_ADD(createdon, INTERVAL :timezonediff SECOND) as createdon' );       
$criteria->condition = "some_amount > 1000";        
$criteria->params = array(':timezonediff' => "10800");      
$transModel = new TransactionModel;

我遇到了一个问题,无法在SELECT中提供":timezondepff"令牌的值。

$criteria->params仅适用于条件中的令牌,而不适用于SELECT。

我甚至试图在$criteria->select中给出一个数组,但没有成功。

有人知道我是不是做错了什么吗?

您可以尝试通过CDbExpression:绕过此问题

$criteria->select=array(
    '*',
    new CDbExpression('DATE_ADD(`createdon`, INTERVAL :timezonediff SECOND) as createdon',array(
        ':timezonediff'=>10800,
    )),
);

感谢大家的贡献。我已经解决了这个问题。我犯了一个导致错误的错误。我将这个标准提供给另一个没有的对象:timezondepff令牌。

即使在"选择"中,令牌的参数也可以平滑地绑定到$criteria->params中,并且不会产生错误。所以从技术上讲,我发布的代码不会有任何错误。

尝试:

$criteria->condition = $main_condition;     
$criteria->params = array(':timezonediff'=>$main_condition);