Yii使用自定义字段查找条件

时间:2014-03-03 00:51:12

标签: php mysql yii

我正在尝试找到自定义字段Question等于userAnswered的{​​{1}}。

我无法弄清楚这个问题。


代码:

0

问题模型:

    $criteria=new CDbCriteria;
    $criteria->with='answers';
    $criteria->select='*, count(answers.id) as userAnswered';
    $criteria->condition='userAnswered=:userAnswered';
    $criteria->params=array(':userAnswered'=>0);
    $model=Question::model()->find($criteria);

Yii错误退回:

class Question extends CActiveRecord
{
    public $userAnswered;

...

public function relations()
{
    return array(
        'answers' => array(self::HAS_MANY, 'Answer', 'answer_id'),
    );
} 

3 个答案:

答案 0 :(得分:1)

我在这里找到答案:condition in criteria in yii framework php

代码:

$criteria=new CDbCriteria;
$criteria->with='answers';
$criteria->select='*, count(answers.id) as userAnswered';
$criteria->having='userAnswered=0';
$model=Question::model()->find($criteria);

答案 1 :(得分:0)

问题与Option有HAS_MANY连接。当您从带有选项的问题中执行选择时,您实际上正在运行2个选择,1表示带问题详细信息,第二个带来选项。

您正在进行SELECT FROM Question WHERE criteria_conditions + SELECT FROM Option WHERE ...

因此,您无法在条件中添加任何与Option相关的条件,因为它将在第一个选择中失败。

您现在有两个选择:
1)使用$criteria->together = true;在此处阅读更多http://www.yiiframework.com/wiki/280/1-n-relations-sometimes-require-cdbcriteria-together/
2)创建标准条件 $ items = Something :: model() - > with(array('relationname'=> array('condition'=>''))) - > find ...

我不确定第二个是否会起作用,但我应该使用'order'=>为了订购记录,我相信'条件'也应该有效。

2个选项可能会产生不同的结果,因此请确保使用您需要的结果。

答案 2 :(得分:0)

您不能在WHERE子句中使用别名列。

你必须使用:

$criteria->condition = 'count(userOptions.id) =:userAnswered';