Критерии 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 6

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)
$criteria = new CDbCriteria();
$criteria->with = array('works');
$criteria->compare('works.theField_name' , $someThing);