Критерии Yii: условие для связи
У меня есть две таблицы: User и User_works (User HAS_MANY User_works).
Как я могу добавить условие, чтобы отображались только пользователи с определенными работами
Пользователь содержит поля: id / name / прочая информация
User_works: id / user_id / work_id
Модель Пользователя:
public function relations()
{
return array(
'works'=>array(self::HAS_MANY, 'UserWorks',
'',
'on' => 'works.user_id=t.id',
'together'=>false,
),
)
}
Контроллер:
$criteria = new CDbCriteria();
$criteria->with = array('works');
$criteria->compare = ????
2 ответа:
Решение:
Я хотел что-то вроде этого:
SQL "Select user.id from User, User_works Where User_works.user_id=User.id AND User_works.work_id=$SOMEVALUE"
Модель Пользователя:
public function relations() { return array( 'works'=>array(self::HAS_MANY, 'UserWorks', '', 'joinType' => 'INNER JOIN', 'on' => 'works.user_id=t.id', 'together'=>true, ), ) }
Контроллер:
В результате я получаю пользователей с необходимыми работами.$criteria = new CDbCriteria(); $criteria->with = array('works'=>array('on' => 'works.user_id=t.id AND (works.work_id=$SOMEVALUE OR ...)'));
Но возникла новая проблема. Количество страниц в Listview отображается неправильно. Вид списка не учитывает состояние необходимых работ. В результате номер страницы получается неправильным.
Решение :
$dataProvider=new CActiveDataProvider('User', array( 'criteria'=>$criteria, 'pagination'=>array( 'pageSize'=>1, ), )); $dataProvider->setTotalItemCount(count(User::Model()($criteria)));
Или
Вместо установки dataprovider критерии:
$dataProvider->criteria = $criteria
Я задаю критерии модели dataprovider ->:
$dataProvider->model->setDbCriteria($criteria)