1

我有一个成员表:成员(id,name,gender,head_id)

我想要的是建立基于户主(谁是成员)的家庭关系。就像这样:一个成员属于一个家庭(由成员定义)

也许我可以把它分成 2 个表,一个成员和家庭表:家庭(id,head_id)和成员表会有一个family_id而不是head_id。

主要问题是添加新成员和修改关系。

编辑:所有的答案都很棒。
我最终手动完成。Dave 的解决方案是我一直在寻找的,但并没有完全按照我希望的方式锻炼。

4

3 回答 3

1

请参阅“同一模型的多个关系”

“也可以创建自我关联,如下所示:”

class Post extends AppModel {

    public $belongsTo = array(
        'Parent' => array(
            'className' => 'Post',
            'foreignKey' => 'parent_id'
        )
    );

    public $hasMany = array(
        'Children' => array(
            'className' => 'Post',
            'foreignKey' => 'parent_id'
        )
    );
}
于 2012-12-09T19:40:55.203 回答
1

从数据库的角度来看,我认为您应该有 3 个表:

  • 人员(身份证、护照号码、姓名、出生日期、...)
  • 家庭(id、father_id、mother_id、surname、number_of_members、...)
  • family_persons (family_id, person_id)

一个家庭被定义为两个人的结合,并且可能有一些其他的共同领域,例如姓氏。

无论如何,如果您按照自己的方式进行操作,则只需一张桌子即可。(父亲head_id设置为 0,其他家庭成员head_id参考他的 id。

如果要使用两个表,控制器可以使用多个模型,因此在save操作中处理更多表不是问题。

于 2012-12-10T09:49:36.317 回答
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)
));

或者

// Find Family 1 and get all its members
$family = $this->Family->find('first', array(
    'conditions' => array('family_id' => 1),
    'contain' => array('Member')
));

您在添加新成员或修改关系方面应该没有任何问题,就像您担心的那样,但如果您遇到任何具体问题,我们可能会为您提供帮助。这种模型关系极为普遍。

于 2012-12-10T17:14:17.593 回答