我是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表中获取用户名,它带有带别名的所有列。我知道这个问题与别名有关。我在这个语法和代码上做错了什么。
请咨询
答案 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
)吗?