我有两个表: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 = ????
解决方案:
我想要这样的东西:
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 ...)'));
结果,我得到了用户所需要的作品。
但是新的问题出现了。列表视图中的页面数没有正确显示。列表视图不考虑必要工程的条件。结果,有一些页面是错误的。
解决方案:
$dataProvider=new CActiveDataProvider('User', array(
'criteria'=>$criteria,
'pagination'=>array(
'pageSize'=>1,
),
));
$dataProvider->setTotalItemCount(count(User::Model()($criteria)));
或
不设置数据提供程序标准:
$dataProvider->criteria = $criteria
我设置dataprovider->模型标准:
$dataProvider->model->setDbCriteria($criteria)
$criteria = new CDbCriteria();
$criteria->with = array('works');
$criteria->compare('works.theField_name' , $someThing);