事前にお詫び申し上げます...私はcakephpの完全な初心者です。そのため、モデルを正しく関連付けるのが非常に困難です。具体的には、「hasManyThrough」の関係で一番困っています。私は壁に頭をぶつけて料理本を精練してきましたが、思ったほどはっきりとはわかりませんでした。
私は現在、多くの複雑な関係を持つWebアプリを書いています。まず、テーブルのバージョンを取り除いたものから始めます。
- ユーザー:
- ID、名前
- グループ:
- id、name、department_id
- 部門:
- id、name、district_id
- 地区:
- ID、名前
- 役割
- ID、名前
- ロールは、私が自分のアクセスレベル(ユーザー、管理者、スーパーユーザー)と呼んでいるものであることに注意してください。
- groups_users -group_id、user_id
- departments_users:
- department_id、user_id、role_id
関係:
- ユーザーhasAndBelongsToMany部門
- 部門hasAndBelongsToManyユーザー
- ユーザーhasAndBelongsToManyグループ
- グループhasAndBelongsToManyユーザー
- 部門hasManyグループ
- グループ所属部門
- 地区には多くの部門があります
- 部門所属地区
さて、ここで私はもう少し混乱します。 ユーザーは複数の部門、複数の地区に所属でき、各部門内でさまざまな役割を持つことができるため(たとえば、地区AのDEPT Aの部門管理者、地区BのDEPT Bの地区管理者)、ユーザーのレベルを配置することにしました。 departments_usersテーブルのアクセスの。名前付きモデル、つまりrole_idの外部キー以上のものを格納しているので、これはhasMany throughリレーションシップの候補のように見えますが、cakeのドキュメントにはモデルリレーションシップのkeepExistingオプションについても記載されています。
だから私はケーキサイトの例を使ってこれを試しました。初期のデータテーブルと関係をすべて残して、次のようにDepartmentPositionモデルとコントローラーを追加しました。
user.php
public $hasMany = array('DepartmentPosition');
department.php
public $hasMany = array('DepartmentPosition');
department_position.php
public $belongsTo = array('User','Department');
また、新しいデータテーブルを追加しました。
- department_position:
- id、department_id、user_id、role_id
OK、それで、おそらくケーキのドキュメントから誤って得たのは、ユーザーを部門に追加するときに、role_idを含めることができ、saveAll()を実行すると、すべてがdepartment_positionデータテーブルに保存されるということです。
それが正しいことかどうかはわかりません。これを書き留めた今、私は以前よりも混乱しているように感じます。笑。これらの関係を正しく設定する方法について、私は非常に混乱しています。それでも、一度実行すると、関連するモデルのデータにアクセスするのに問題が発生するように感じます。大量のエラーが発生し、関連するモデルデータを取得できません。eek。私が言ったように、私は最強のケーキ屋ではありません。
動脈瘤になる前に何か提案はありますか?!笑。負荷に感謝します。どんな助けでも大いに役立ちます!