【问题标题】:Yii Criteria: condition for relationYii Criteria: 关系条件
【发布时间】:2014-03-11 08:18:39
【问题描述】:

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

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

用户包含字段:id |姓名 |其他资料

User_works: id |用户 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 = ????

【问题讨论】:

  • 你想从某些作品的用户那里得到数据意味着你想从 User_works 表中的 work_id 中搜索?

标签: yii compare conditional-statements criteria relation


【解决方案1】:

解决方案:

我想要这样的东西:

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->criteria = $criteria

我设置了dataprovider->模型标准:

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

【讨论】:

    【解决方案2】:
    $criteria = new CDbCriteria();
    $criteria->with = array('works');
    $criteria->compare('works.theField_name' , $someThing);
    

    【讨论】:

    • 你必须设置$criteria->together = true
    • 如果没有选项“together = true”我可以这样做吗?
    • 我认为你不需要together,当你有with时,它就完成了
    • 你想在哪里使用这个标准?
    • @Taram 你应该两个都试试。我的过滤器没有按预期工作,因为together 未设置为true。阅读Yii Relation guide 以获得更好的解释。
    猜你喜欢
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-15
    • 1970-01-01
    相关资源
    最近更新 更多