1

我是 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 uJOIN tbl_taskcomment cmt ON (cmt.commented_userd_id = u.id) WHERE cmt.commented_userd_id = 1 ORDER BY cmt.id ASC

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

好心劝告

4

4 回答 4

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'

于 2012-04-26T11:39:19.183 回答
2

这应该可以帮助您:

http://www.yiiframework.com/doc/guide/1.1/en/database.arr#disambiguating-column-names

于 2012-07-23T02:29:45.220 回答
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 
于 2012-04-25T06:57:54.977 回答
0

我想我在CDbCriteria.
您可以尝试默认别名(即t)吗?

于 2012-04-25T07:08:51.337 回答