我正在尝试找到自定义字段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'),
);
}
答案 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';