我有两个表:
user
和asset
以及有user_asset
表格可以建立多种关系
现在我只想在CGridView中显示与登录用户相关的资产(user_id
来自Yii::app()->user->id
)
如何编写可以实现的标准?
答案 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表别名,我从错误消息中得到了一个提示:)