我有一张会员表: 成员(id,name,gender,head_id)
我想要的是建立基于户主(谁是会员)的家庭关系。 它就像:一个成员属于一个家庭(由成员定义)
也许我可以把它分成2个表,一个成员和家庭表: 家庭(id,head_id) 而且Members表将有一个family_id而不是head_id。
主要问题是添加新成员和修改关系。
编辑: 所有答案都很棒 我最终手动完成了。戴夫的解决方案正是我所寻找的,但并没有按照我希望的方式进行锻炼。
答案 0 :(得分:1)
请参阅"Multiple Relations to the Same Model"
“也可以创建自我关联,如下所示:”
class Post extends AppModel {
public $belongsTo = array(
'Parent' => array(
'className' => 'Post',
'foreignKey' => 'parent_id'
)
);
public $hasMany = array(
'Children' => array(
'className' => 'Post',
'foreignKey' => 'parent_id'
)
);
}
答案 1 :(得分:1)
从数据库的角度来看,我认为你应该有3个表:
一个家庭被定义为两个人的联合,可能还有其他一些共同的领域,例如姓氏。
无论如何,如果你这样做,你可以用一张桌子来做。 (父亲head_id
设置为0,其余家庭成员head_id
提及他的身份。
如果您想使用两个表,控制器可以使用多个模型,因此在save
操作中处理更多表不是问题。
答案 2 :(得分:0)
你应该有两张桌子。这是最好的方式,并将在您的应用程序中为您提供最大的灵活性和易用性。
数据库表
// families
id | name
------------------------------
1 | Smith
2 | Jones
3 | Davis
// members table
id | family_id | name | gender
-----------------------------------
1 | 2 | James | M
2 | 3 | Christine | F
3 | 1 | David | M
4 | 2 | Mark | M
5 | 1 | Simon | M
6 | 1 | Lucy | F
CakePHP模型
然后,您只需要定义模型,使它们具有正确的关系。
// app/Model/Family.php
class Family extends AppModel {
public $hasMany = array('Member');
}
// app/Model/Member.php
class Member extends AppModel {
public $belongsTo = array('Family');
}
然后你可以像这样检索你的家庭:
CakePHP控制器
// Find all members that belong to Family 1
$family = $this->Member->find('all', array(
'conditions' => array('family_id' => 1)
));
OR
// Find Family 1 and get all its members
$family = $this->Family->find('first', array(
'conditions' => array('family_id' => 1),
'contain' => array('Member')
));
添加新成员或修改关系不会有任何问题,就像您担心的那样,但如果您遇到任何特定问题,我们可能会帮助您。这种模式关系非常普遍。