2016-02-02 85 views
0

晚上好,Yii的關係查詢與「到」

在本頁面(http://www.yiiframework.com/doc/guide/1.1/en/database.arr#relational-query-with-through它描述瞭如何讓所有評論使用「通過」的特定組的所有用戶: enter image description here

class Group extends CActiveRecord 
{ 
    ... 
    public function relations() 
    { 
     return array(
      'roles'=>array(self::HAS_MANY,'Role','group_id'), 
      'users'=>array(
       self::HAS_MANY,'User',array('user_id'=>'id'),'through'=>'roles' 
      ), 
      'comments'=>array(
       self::HAS_MANY,'Comment',array('id'=>'user_id'),'through'=>'users' 
      ), 
     ); 
    } 
} 

我該怎麼做恰恰相反?也就是說,獲得發表特定評論的用戶組(評論模型基本上)。

到目前爲止,我甚至能達到「角色」表:

'user' => array(self::BELONGS_TO, 'User', 'user_id'), 
'roles'=>array(self::HAS_MANY, 'Role', array('id'=>'user_id'), 'through' => 'user') // shouldn't it join User.id to Role.user_id ? 

它提出了以下錯誤:「列未找到:1054未知列‘’在」哪裏user.user_id條款'。它似乎與第一行有關,而不是第二行...

任何想法?

真誠, Apidcloud

+0

可能會嘗試將其切換'array('user_id'=>'id')'? – SiZE

+0

請提及您的模型結構,它們的字段以及它們的外鍵關係。 –

+0

@SiZE不起作用 – Apidcloud

回答

2

當你想拿到小組誰做特定的評論的用戶。您必須在評論模型中添加這些關係。

public function relations() 
{ 
    // NOTE: you may need to adjust the relation name and the related 
    // class name for the relations automatically generated below. 
    return array(
     'user' => array(self::BELONGS_TO, 'User', 'user_id'), 
     'roles'=>array(
      self::HAS_ONE,'Role',array('id'=>'user_id'),'through'=>'user' 
      ), 
      'group'=>array(
       self::BELONGS_TO,'Group','group_id','through'=>'roles' 
      ) 
    ); 
} 

並查看文件,你可以得到這樣的組名。

<?php echo CHtml::encode($data->group->name); ?> 

希望這會幫助你。

+0

它引發此錯誤: 屬性「CBelongsToRelation.through」未定義。 如果我刪除'group'數組,它仍會引發主帖中描述的錯誤。 – Apidcloud

+0

似乎最後一個數組應該是self :: HAS_ONE,而它仍會引發主帖中描述的錯誤:'列未找到:1054未知列'user.user_id' – Apidcloud

+0

我們可以在這裏討論您的問題,http: //chat.stackoverflow.com/rooms/102507/yii-help –