我有兩個表:user
和asset
並有user_asset
表,使得many_many關係警予CGridView只顯示已登錄用戶的記錄many_many關係
現在我想只顯示與相關資產登錄CGridView中的用戶(user_id
來自Yii::app()->user->id
)
如何編寫使其成爲可能的條件?
我有兩個表:user
和asset
並有user_asset
表,使得many_many關係警予CGridView只顯示已登錄用戶的記錄many_many關係
現在我想只顯示與相關資產登錄CGridView中的用戶(user_id
來自Yii::app()->user->id
)
如何編寫使其成爲可能的條件?
我得到了它的工作,加入這個模型類的搜索方法中:
$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表別名,我從錯誤消息中得到提示:)
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)您創建一個數據提供程序,將只取(在模型中定義它(最好)或不在視圖中的控制器bu):
$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,
...
));
代碼給出例子,你應該把它適應您的需求!
它給了我'id = ...'的sql錯誤,改爲't.id = ...',錯誤消失了,但仍然沒有按預期工作。解決方案在我的答案。 – zuups
您是否已經建立了模型類中的表之間的關係? – Stu
是有關係 - 用戶模型中的'資產'和資產模型中的'用戶' – zuups