yii CGridView仅以many_many关系显示登录用户的记录

时间:2013-01-04 12:38:13

标签: yii

我有两个表:
userasset以及有user_asset表格可以建立多种关系

现在我只想在CGridView中显示与登录用户相关的资产(user_id来自Yii::app()->user->id

如何编写可以实现的标准?

2 个答案:

答案 0 :(得分:2)

1)您需要在两个模型中定义关系

用户:

'assets' => array(self::MANY_MANY, 'Asset', 'user_asset(user_id, asset_id)'),

资产:

'users' => array(self::MANY_MANY, 'Asset', 'user_asset(asset_id, user_id)'),

2)您创建一个dataProvider,它只获取被收集的数据(在模型中定义它(最好)或不在视图中的控制器):

$dataProvider=new CActiveDataProvider('Asset', array(
'criteria'=>array(
    'with'=>array(
        'users'=>array(
            'condition' => 'id = ' . Yii::app()->user->id
         ),
     ),
),
 ...
));

3)您向CGridView提供了良好的提供者:

$this->widget('zii.widgets.grid.CGridView', array(
    'dataProvider'=>$dataProvider,
    ...
));

代码是作为示例给出的,您应该根据需要进行调整!

答案 1 :(得分:0)

我完成了它,在Model类的搜索方法中添加了这个:

    $criteria->with=array(
      'users'  
    );
    $criteria->together = true;
    $criteria->condition = "users_users.user_id='".Yii::app()->user->id."'";

...并在CActiveDataProvider声明中:

'criteria'=>array(
    'with' => 'users',
    'together'=>true,
    'condition'=>'users_users.user_id = '.Yii::app()->user->id,
),

也许不是最好的方式,但做了所需要的。 users_users是Yii的sql表别名,我从错误消息中得到了一个提示:)