2012-11-03 34 views
1

我有3種型號:Yii的:屬於通過

Groups 
    id 
    name 

Users 
    id 
    group_id 
    login 
    // .... 

Messages 
    id 
    user_id 
    title 
    body 
    // .... 

用戶屬於組,並有許多消息

'group' => array(self::BELONGS_TO, 'Groups', 'group_id'), 
'messages' => array(self::HAS_MANY, 'Messages', 'user_id') 

組有許多用戶

'users' => array(self::HAS_MANY, 'Users', 'group_id') 

消息屬於用戶

'user' => array(self::BELONGS_TO, 'Users', 'user_id') 

屬於Yii中的關係沒有$through所以我如何定義連接消息和組的關係(即,消息屬於組)?

UPD:骯髒的黑客攻擊。在Messages

class BelongsToThrough extends CBelongsToRelation { 
    public $through; 
} 

設置爲關係類型:定義新的類型關係

'group' => array('BelongsToThrough', 'Groups', 'group_id', 'through' => 'user') 

和它的作品。不知何故。有人能解釋這是如何工作的?

+0

起來看看[CHasOneRelation]源(https://github.com/yiisoft/yii /blob/1.1.12/framework/db/ar/CActiveRecord.php#L2155) –

回答

0

也許你可以建立信息和羣體之間的橋樑表(groups_messages)和他們這樣的連接:

'groups' => array(self::MANY_MANY, 'Groups', 'groups_messages(message_id, group_id)') 
+1

用於什麼?我只需要另一個查詢連接。添加另一個表來關聯它們並不聰明,因爲Yii無法處理相關的記錄操作本身(刪除/更新),我將不得不添加一些行爲。所以表+行爲依賴。矯枉過正。 – Daniel