1

私は3つのモデルを持っています:

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:汚いハック。新しいタイプのリレーションを定義:

class BelongsToThrough extends CBelongsToRelation {
    public $through;
}

でリレーション タイプとして設定しMessagesます。

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

そしてそれは動作します。何とかして。誰かがそれがどのように機能しているのか説明してもらえますか?

4

1 に答える 1

0

おそらく、メッセージとグループの間にブリッジ テーブル (groups_messages) を構築し、次のように接続できます。

'groups' => array(self::MANY_MANY, 'Groups', 'groups_messages(message_id, group_id)')
于 2012-11-03T10:02:11.973 に答える