CDBCriteria中SELECT的绑定参数

时间:2013-12-11 13:11:26

标签: php activerecord yii

我正在使用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中提供“:timezonediff”标记的值。

$criteria->params仅适用于有效的令牌,但不适用于SELECT。

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

有人知道我在这里做错了吗?

3 个答案:

答案 0 :(得分:1)

您可以尝试通过CDbExpression

来解决这个问题
$criteria->select=array(
    '*',
    new CDbExpression('DATE_ADD(`createdon`, INTERVAL :timezonediff SECOND) as createdon',array(
        ':timezonediff'=>10800,
    )),
);

答案 1 :(得分:0)

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

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

答案 2 :(得分:-2)

尝试:

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