CakePHPアプリケーションのtableA HABTM tableA関係を作成する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/226805

  •  03-07-2019
  •  | 
  •  

質問

登録ユーザーが他の用途に自分自身を関連付けてファミリーを作成できるようにする機能を作成する必要があります。データベーステーブルは次のようになります。

db.persons -(ボブ、ジェーン、ティミーなど)

  • id
  • 名前
  • メール

db.persons_persons

  • id
  • person__id_parent
  • person_id_child
  • relationtype_id

db.relationtypes -(配偶者、子供、neなど)

  • id
  • 名前

この構造を使用すると、persons_personsテーブルでBobがJaneの配偶者であることを指定できるはずです。 db.persons_personsのレコードは(psuedo)のようになります。

ID | person_parent | person_child | relationtype
1  | Bob           | Jane         | Spouse
2  | Bob           | Timmy        | Child

ボブとジェーンが結婚している場合、一方の子を他方に関連付ける必要があるため、これによりデータの断片化が発生する可能性があることを認識しています。しかし、それは私の質問ではありません。私の質問は、このデータベースのセットアップがcakePHPアプリケーションで使用するための「最も正しい」かどうかです。

役に立ちましたか?

解決

まず、CakePHPは自動的に people テーブルを people コントローラーと person モデルに反映するため、呼び出す必要はありません。 persons 。次に、 persons_persons ではなく、ルックアップテーブル relationships を呼び出します。

リレーションシップテーブルのフィールド person_id relation_id および relation_type_id を呼び出してから、にアンダースコアを追加します relation_types になります。

これはセマンティックだと思います。

hasAndBelongsToManyアソシエーションを引き続き使用し、オートマジック" with "関連タイプのHABTMテーブルの追加データにアクセスするためにCakePHP(1.2のみ)が提供する関連付け。

しかし、私は使用したくなるでしょう:

  • Person hasMany Relation
  • Relation belongsTo Person Relation RelationType

あなたのアプリでは、人との関係は他の人との関係によって暗示されていますか?つまりPerson.id = 1を見つけた場合、すべての関係を取得できます。 Person.id 2、3、および4。ただし、Person.id 2が見つかった場合、そのリレーションシップを表すリレーションテーブルに別のレコードがない限り、Person.id = 1を自動的に取得しません。

これを達成するために、別のアソシエーションを設定できます:

  • Person hasFormanKey person_id
  • を持つhasMany Relation1
  • Person hasMany Relation2 with foreignKey relation_id
  • Relation belongsTo Person Relation RelationType

注、このHABTMとの二重の関係も実現できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top