tbl_user_conv (id, user_id, conv_id) эта таблица связывает предыдущие по id (Many_Many)
Модель Conv:
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'users'=>array(self::MANY_MANY, 'User',
'tbl_user_conv(conv_id,user_id)'),
);
}
Пытаюсь в контроллере сделать выборку из Conv по конкретному пользователю(id), т.е. хочу выбрать те Conv, по которым существует запись в tbl_user_conv для текущего пользователя:
Получаю ошибку: CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘users.user_id’ in ‘where clause’
Подскажите, в чём причина ? Как правильно записать условия?
SELECT COUNT(DISTINCT `t`.`id`) FROM `tbl_conv` `t` LEFT OUTER JOIN `tbl_user_conv` `users_users` ON (`t`.`id`=`users_users`.`conv_id`) LEFT OUTER JOIN `tbl_user` `users` ON (`users`.`id`=`users_users`.`user_id`) WHERE (users.conv_id=1)
Алярм алярм… предыдущее решение оказывается работало криво (не фильтровало по user_id).
Нашёл новое решение, на мой взгляд более элегантное:
//This code works fine
public function actionConvList(){
// в примере я делаю with('users','posts'), а не просто with('users'), т.к. в дальнейшем мне нужна ещё связь с постами <img src='http://www.yiiframework.com/forum/public/style_emoticons/default/smile.gif' class='bbc_emoticon' alt=':)' />
// conv_id=1 беру для примера (вообще беру из $_GET)
$conv_id=1;
$model = Conv::model()->with('users','posts')->findAll(array(
'condition'=>'users.id='.Yii::App()->user->id.' AND t.id='.$conv_id,
'order'=>'t.lastchange DESC',
));
$dataProviderConv=new CActiveDataProvider('Conv');
$dataProviderConv->setData($model);
$this->render('convlist',array(
'dataProviderConv'=>$dataProviderConv,
));
}
Так я и не понял почему возникает ошибка “CDbCommand failed to execute the SQL statement: SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘users.user_id’ in ‘where clause’” если делать вот так:
//This code doesn't work
public function actionConvList(){
$dataProviderConv=new CActiveDataProvider('Conv',
array(
'criteria'=>array(
'with' => array('users','posts'),
'condition'=>'t.id=1 AND users.user_id = 1',
),
'pagination'=>array(
'pageSize'=>3,
'pageVar'=>'page2',
),
)
);
$this->render('convlist',array(
'dataProviderConv'=>$dataProviderConv,
));
}