Я новичок в 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 Идентификатор столбца в списке полей неоднозначен. Оператором SQL был: SELECT id, имя пользователя, email, createtime, lastvisit, superuser, статус 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, он поставляется со всем столбцом без имени псевдонима. Я знал, что этот вопрос связан с псевдонимом. Что я сделал неправильно в этом синтаксисе, а также в коде.
Прошу совета
Или
change: $criteria->select = "username" to ==> $criteria->select = "u.username"
ИЛИ
remove: $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'
Это должно помочь вам:
http://www.yiiframework.com/doc/guide/1.1/en/database.arr#disambiguating-column-names
Возможно, у вас столбец 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
Думаю, я столкнулся с некоторыми проблемами с псевдонимами в CDbCriteria
.
Можете ли вы попробовать псевдоним по умолчанию (который есть t
)?