【发布时间】:2013-05-04 03:53:27
【问题描述】:
我一直在寻找这个问题的明确答案,但一直无法解决。我最近一直在使用(和学习)CakePHP,并且遇到了障碍。为了简化我的数据库,假设我们只有两个表:
persons
relationships(或persons_persons)
Persons 与自身之间存在多对多关系 - 事实上,两个人之间可以存在不止一种关系:
persons
-------
*person_id*
name
relationships
-------------
*relationship_id*
person_1_id
person_2_id
start_date
end_date
现在,如果我想说 Person1 (id=1) 与 Person2 结婚,我将在 relationships 表中有一个条目。 person_1_id 将是 1,person_2_id 将是两个。
我可以在 CakePHP 中创建这种关系,并显示每个 Person 记录的关系(和人员)列表。但是,这是一个单向关系:对于 Person 1,查询只会拉取 person_1_id 匹配的 Relationship 对象。如果我想查询第 2 个人的关系,我必须有第二个相同的行,将 person_1_id 和 person_2_id 交换。
这是模型:
class Member extends AppModel {
public $hasMany = array(
'Relationships' => array(
'className' => 'Relationship',
'foreignKey' => 'person_1_id'
)
);
}
class Relationship extends AppModel {
public $belongsTo = array(
'Person1' => array(
'className' => 'Person',
'foreignKey' => 'person_1_id'
),
'Person2' => array(
'className' => 'Person',
'foreignKey' => 'person_2_id'
)
);
}
有什么建议吗?当 person_1_id 实际上与 person_2_id 没有分离时,复制关系实体没有逻辑意义。
【问题讨论】: