1

我有两个表:
user并且asset有一个user_asset表使 many_many 关系

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

如何编写使其成为可能的标准?

4

2 回答 2

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,
    ...
));

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

于 2013-01-04T14:25:13.840 回答
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 表别名,我从错误消息中得到提示 :)

于 2013-01-06T06:48:47.400 回答