Yii:属于通
Posted
技术标签:
【中文标题】Yii:属于通【英文标题】:Yii: belongs to through 【发布时间】: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')
它有效。不知何故。有人可以解释一下它是如何工作的吗?
【问题讨论】:
看CHasOneRelation的出处 【参考方案1】:也许您可以在消息和组之间建立一个桥接表(groups_messages)并像这样连接它们:
'groups' => array(self::MANY_MANY, 'Groups', 'groups_messages(message_id, group_id)')
【讨论】:
有什么用?我只需要另一个加入查询。添加另一个表只是为了关联它们并不聪明,因为 Yii 本身无法处理相关的记录操作(删除/更新),我必须添加一些行为。所以表+行为依赖。矫枉过正。以上是关于Yii:属于通的主要内容,如果未能解决你的问题,请参考以下文章