2013-01-04 66 views
1

我有兩個表:
userasset並有user_asset表,使得many_many關係警予CGridView只顯示已登錄用戶的記錄many_many關係

現在我想只顯示與相關資產登錄CGridView中的用戶(user_id來自Yii::app()->user->id

如何編寫使其成爲可能的條件?

+2

您是否已經建立了模型類中的表之間的關係? – Stu

+0

是有關係 - 用戶模型中的'資產'和資產模型中的'用戶' – zuups

回答

0

我得到了它的工作,加入這個模型類的搜索方法中:

$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表別名,我從錯誤消息中得到提示:)

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)您創建一個數據提供程序,將只取(在模型中定義它(最好)或不在視圖中的控制器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, 
    ... 
)); 

代碼給出例子,你應該把它適應您的需求!

+0

它給了我'id = ...'的sql錯誤,改爲't.id = ...',錯誤消失了,但仍然沒有按預期工作。解決方案在我的答案。 – zuups