2014-03-03 24 views
0

我试图找到具有自定义字段userAnswered等于0QuestionYii通过自定义字段查找条件

我无法弄清楚这个问题。


代码:

$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); 

问题型号:

class Question extends CActiveRecord 
{ 
    public $userAnswered; 

... 

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

的Yii返回错误:

SQL: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'userAnswered' in 'where clause'. 

回答

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); 
0

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

你正在做一个SELECT FROM Question WHERE criteria_conditions +一个SELECT FROM Option WHERE ...

所以你不能把一个条件在中上的标准,因为它会在第一选择无法从期权相关的任何东西。

您现在有两种选择:
1)使用$criteria->together = true;在这里阅读更多http://www.yiiframework.com/wiki/280/1-n-relations-sometimes-require-cdbcriteria-together/
2)要创建标准条件类似 $项目=东西::模型() - >用(阵列('relationname '=> array('condition'=>''))) - >找到...

我不确定第二个是否可以工作,但应该已经使用'order'=>命令记录,我相信“条件”也应该起作用。

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

+0

我尝试添加'$基准 - >共同=真实;'但仍然返回相同的错误。 –

0

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

你必须使用:

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

嗨@kumar_v!无论如何,我得到错误'SQL:SQLSTATE [HY000]:一般错误:1111组功能无效的使用.'试图使用这样的。 –

+0

你可以发布你的代码吗? –

+0

我只是评论'condition'和'params'行,并在原代码中添加了这一行。 –

相关问题