我有两个表:
user
并且asset
有一个user_asset
表使 many_many 关系
现在我只想在 CGridView 中显示与登录用户相关的资产(user_id
来自Yii::app()->user->id
)
如何编写使其成为可能的标准?
我有两个表:
user
并且asset
有一个user_asset
表使 many_many 关系
现在我只想在 CGridView 中显示与登录用户相关的资产(user_id
来自Yii::app()->user->id
)
如何编写使其成为可能的标准?
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,
...
));
该代码作为示例给出,您应该根据需要对其进行调整!
我得到了它,在 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 表别名,我从错误消息中得到提示 :)