Yii标准:关系的条件

Yii标准:关系的条件,yii,compare,conditional-statements,criteria,relation,Yii,Compare,Conditional Statements,Criteria,Relation,我有两个表:User和User\u works(User有许多User\u作品) 如何添加仅显示具有特定作品的用户的条件 用户包含字段:id | name |其他信息 用户工作:id |用户id |工作id 用户模型: public function relations() { return array( 'works'=>array(self::HAS_MANY, 'UserWorks', '', 'on' => 'works.user_i

我有两个表:User和User\u works(User有许多User\u作品)

如何添加仅显示具有特定作品的用户的条件

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

用户工作:id |用户id |工作id

用户模型:

public function relations()
{       
  return array(
    'works'=>array(self::HAS_MANY, 'UserWorks',
    '',
    'on' => 'works.user_id=t.id',
    'together'=>false,
    ),
  )
}
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');
$criteria->compare = ????
$criteria = new CDbCriteria();
$criteria->with = array('works'=>array('on' => 'works.user_id=t.id AND (works.work_id=$SOMEVALUE OR ...)'));
解决方案:

我想要这样的东西:

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',
    '',
    'on' => 'works.user_id=t.id',
    'together'=>false,
    ),
  )
}
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');
$criteria->compare = ????
$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->criteria = $criteria
$dataProvider->model->setDbCriteria($criteria)
我设置了dataprovider->模型标准:

$dataProvider->criteria = $criteria
$dataProvider->model->setDbCriteria($criteria)

您必须设置
$criteria->together=true
。我可以不使用“together=true”选项进行设置吗?我认为您不需要将
一起设置为
,当您使用
时,您可以在何处使用此条件?@Taram您应该尝试这两种方法。我曾经遇到过这样一种情况,我的过滤器没有按预期工作,因为
一起
没有设置为
true
。请阅读以获得更好的解释。您想要从具有特定作品的用户处获得数据意味着您想要从用户作品表中的作品\ id进行搜索?