Yii标准:关系的条件

Tar*_*ram 6 compare criteria relation yii conditional-statements

我有两个表:User和User_works(User HAS_MANY User_works).

如何添加条件以仅显示具有某些作品的用户

用户包含字段:id | 名字| 其他信息

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,
    ),
  )
}
Run Code Online (Sandbox Code Playgroud)

控制器:

$criteria = new CDbCriteria();
$criteria->with = array('works');
$criteria->compare = ????
Run Code Online (Sandbox Code Playgroud)

Tar*_*ram 6

解:

我想要这样的东西:

SQL "Select user.id from User, User_works Where User_works.user_id=User.id AND User_works.work_id=$SOMEVALUE"
Run Code Online (Sandbox Code Playgroud)

用户模型:

public function relations()
{       
  return array(
    'works'=>array(self::HAS_MANY, 'UserWorks',
    '',
    'joinType' => 'INNER JOIN', 
    'on' => 'works.user_id=t.id',
    'together'=>true,
    ),
  )
}
Run Code Online (Sandbox Code Playgroud)

控制器:

$criteria = new CDbCriteria();
$criteria->with = array('works'=>array('on' => 'works.user_id=t.id AND (works.work_id=$SOMEVALUE OR ...)'));
Run Code Online (Sandbox Code Playgroud)

结果,我得到了用户必要的工作.

但是出现了一个新问题.Listview中的页数未正确显示.列表视图不考虑必要工作的条件.结果,一些页面是错误的.

方案:

 $dataProvider=new CActiveDataProvider('User', array(
        'criteria'=>$criteria,      
        'pagination'=>array(
            'pageSize'=>1,
        ),
    ));
 $dataProvider->setTotalItemCount(count(User::Model()($criteria)));
Run Code Online (Sandbox Code Playgroud)

要么

而不是设置数据提供者标准:

$dataProvider->criteria = $criteria
Run Code Online (Sandbox Code Playgroud)

我设置了dataprovider-> model criteria:

$dataProvider->model->setDbCriteria($criteria)
Run Code Online (Sandbox Code Playgroud)