【问题标题】:Yii: belongs to throughYii:属于通
【发布时间】:2012-11-03 09:53:23
【问题描述】:

我有 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')

它有效。不知何故。有人可以解释一下它是如何工作的吗?

【问题讨论】:

标签: php activerecord orm yii


【解决方案1】:

也许您可以在消息和组之间建立一个桥接表(groups_messages)并像这样连接它们:

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

【讨论】:

  • 有什么用?我只需要另一个加入查询。添加另一个表只是为了关联它们并不聪明,因为 Yii 本身无法处理相关的记录操作(删除/更新),我必须添加一些行为。所以表+行为依赖。矫枉过正。
猜你喜欢
  • 2011-11-10
  • 2013-06-10
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-09
  • 2013-05-21
相关资源
最近更新 更多