1

メンバーテーブルがあります:Members(id、name、gender、head_id)

私が望んでいるのは、世帯主(メンバー)を中心に家族関係を築くことです。つまり、次のようになります。1つのメンバーが1つのファミリに属します(メンバーによって定義されます)

たぶん私はそれを2つのテーブル、MembersとFamiliesテーブルに分割することができます:Families(id、head_id)とMembersテーブルはhead_idの代わりにfamily_idを持ちます。

主な問題は、新しいメンバーの追加と関係の変更です。

編集:すべての答えは素晴らしかった。
私はそれを手動で行うことになりました。デイブの解決策は私が探していたものですが、私が望んでいたように正確にうまくいきませんでした。

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、passport_number、name、dob、...)
  • 家族(id、father_id、mother_id、surname、number_of_members、。。。)
  • familys_persons(family_id、person_id)

家族は2人の結合として定義され、名前などの他の一般的なフィールドがある場合があります

とにかく、あなたがあなたのやり方でそれをするならば、あなたはただ一つのテーブルでそれをすることができます。(父はhead_id0に設定され、残りの家族はhead_id彼のIDを参照しています。

2つのテーブルを使用する場合、コントローラーは複数のモデルを使用できるため、saveアクションでより多くのテーブルを処理することは問題ありません。

于 2012-12-10T09:49:36.317 に答える
0

2つのテーブルが必要です。これが最良の方法であり、アプリケーション内で最も柔軟性と使いやすさを提供します。

データベーステーブル

// 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 に答える