简体   繁体   English

通过Yii中的CDbCriteria选择一个表达式

[英]Select an expression by CDbCriteria in Yii

firstly, I using the codes below: 首先,我使用以下代码:

$c = new CDbCriteria();

$c->select = '*, DATEDIFF(deadline_time, NOW()) AS day_left';
$c->addCondition('DATEDIFF(deadline_time, NOW()) > 0');
$c->addCondition('DATEDIFF(deadline_time, NOW()) < :diff');
$c->params += array(':diff' => $diff);

$assigns = UserAssign::model()->findAll($c);

the query works fine, but I want to add some new condition through relations, so the codes turned to like this: 该查询工作正常,但我想通过关系添加一些新条件,因此代码变为:

$c = new CDbCriteria();
$c->with = array('user');

if(Yii::app()->user->model->isAreaAdministrator) {
    $c->addCondition('user.city_id = :cityId');
    $c->params += array(':cityId' => Yii::app()->user->model->adminCityId);
}

$c->select = '*, DATEDIFF(deadline_time, NOW()) AS day_left';
$c->addCondition('DATEDIFF(deadline_time, NOW()) > 0');
$c->addCondition('DATEDIFF(deadline_time, NOW()) < :diff');
$c->params += array(':diff' => $diff);

$assigns = UserAssign::model()->findAll($c);

After I add the with property, the query seems not working, it dump the message trying to select an invalid column "DATEDIFF(deadline_time" error. 添加with属性之后,查询似乎无法正常工作,它转储了trying to select an invalid column "DATEDIFF(deadline_time"错误的消息。

I'm newbie to Yii, could anyone help me? 我是Yii的新手,有人可以帮助我吗? Thanks. 谢谢。

Replace DATEDIFF(deadline_time, NOW()) in the conditions with 将条件中的DATEDIFF(deadline_time, NOW())替换为

new CDbExpression('DATEDIFF(deadline_time, NOW())')

I'm not sure it works in the select though. 我不确定它在select是否有效。 In case it doesn't you can use the afterFind function to set a public variable $day_left to the value of the DATEDIFF(deadline_time, NOW())' 如果不是这样,您可以使用afterFind函数将公共变量$day_left设置为DATEDIFF(deadline_time, NOW())'

class UserAssign{
    public $day_left;//new variable
    ...

    public function afterFind(){
        $this->day_left=date_diff(date_create($this->deadline_time),date_create('now'))->format('%R%a days');
        return parent::afterFind();
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM