字段列表中的列'id'在YII中是不明确的

时间:2012-04-25 06:42:54

标签: php mysql yii

我是YII的新人。试图在控制器中实现查询,下面是我从控制器获取的代码。

public function getCommentListByUser($user_id)
{
        $criteria = new CDbCriteria;
        $criteria->select = "username";
        $criteria->alias = "u";
            $criteria->condition = 'cmt.commented_userd_id  = '.$user_id;
            $criteria->join = 'JOIN tbl_taskcomment cmt ON  (cmt.commented_userd_id = u.id)';
            $criteria->order = 'cmt.id ASC';  
            $model = User::model()->findAll($criteria);  
            return $model;
}

当我运行页面时,我收到以下错误,

CDbCommand无法执行SQL语句:SQLSTATE [23000]:完整性约束违规:1052字段列表中的列“id”不明确。执行的SQL语句是:SELECT id,username,email,createtime,lastvisit,superuser,status FROM tbl_users u JOIN tbl_taskcomment cmt ON(cmt.commented_userd_id = u.id)WHERE cmt.commented_userd_id = 1 ORDER BY cmt.id ASC

取而代之的是从USER表中获取用户名,它带有带别名的所有列。我知道这个问题与别名有关。我在这个语法和代码上做错了什么。

请咨询

4 个答案:

答案 0 :(得分:4)

更改:$criteria->select = "username" to ==> $criteria->select = "u.username"

删除:$criteria->alias = "u" and change $criteria->select = "username" to ==> $criteria->select = "t.username" and change all left join alias 'u.field_name' to ==> 't.field_name'

答案 1 :(得分:2)

答案 2 :(得分:0)

您可能在两个表中都有id列。 如果您需要表tbl_users中的列,则应使用别名来获取每列:

SELECT u.id, u.username, u.email, u.createtime, u.lastvisit, u.superuser, u.status FROM tbl_users u

你的WHERE条件应该是:

WHERE u.id = 1 

答案 3 :(得分:0)

我想我在CDbCriteria中遇到了一些别名问题 你可以尝试默认别名(t)吗?