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ステートメントは次のとおりです。SELECTid、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

のエイリアスでいくつかの問題に直面したと思いますCDbCriteria
デフォルトのエイリアス ( ) を試してもらえますtか?

于 2012-04-25T07:08:51.337 に答える
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 に答える