2012-04-25 72 views
1

我是YII中的新成员。试图在控制器中实现查询,下面是我从控制器获取的代码。字段列表中的列'id'在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_usersu JOIN tbl_taskcomment cmt ON(cmt.commented_userd_id = u.id)WHERE cmt.commented_userd_id = 1 ORDER BY cmt.id ASC

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

请建议

+3

您不应该为此编写sql,请使用模型的关系和ActiveRecord的查找方法。如果你使用Gii来生成你的模型,你应该已经建立了关系。张贴他们,我可以帮忙。 – adamors 2012-04-25 06:57:46

+0

谢谢Ors它的工作 – mymotherland 2012-04-26 04:57:42

回答

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 
0

我想我遇到了一些问题,别名CDbCriteria
您可以尝试使用默认别名(即t)吗?

+0

我的意思是删除'$ criteria-> alias =“u”'并用你的代码示例中的't'代替'u'。尝试在'select'属性中指定别名:'$ criteria-> select =“t.username”;' – yuvin 2012-04-25 07:28:51

4

要么

变化:$criteria->select = "username" to ==> $criteria->select = "u.username"

OR

删除:$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'