2

事前にお詫び申し上げます...私は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

関係:

  1. ユーザーhasAndBelongsToMany部門
  2. 部門hasAndBelongsToManyユーザー
  3. ユーザーhasAndBelongsToManyグループ
  4. グループhasAndBelongsToManyユーザー
  5. 部門hasManyグループ
  6. グループ所属部門
  7. 地区には多くの部門があります
  8. 部門所属地区

さて、ここで私はもう少し混乱します。 ユーザーは複数の部門、複数の地区に所属でき、各部門内でさまざまな役割を持つことができるため(たとえば、地区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。私が言ったように、私は最強のケーキ屋ではありません。

動脈瘤になる前に何か提案はありますか?!笑。負荷に感謝します。どんな助けでも大いに役立ちます!

4

1 に答える 1

4

ユーザーが異なるグループで異なるロールを持つことができる場合は、HABTMまたはhasManyThroughテーブルの間に何かが必要です。

Cakeバージョン2.1より前は、追加の列(ここではrole_idの下)とHABTMの関係を設定することはできませんでした。保存すると列が失われます。一意のパラメータをkeepExistingに設定した場合、これはもう当てはまりませんが、HABTMよりもhasManyThrough関係の方が好きです。味の問題だと思います。

User hasMany GroupRole

GroupRole belongsTo User, GroupRole belongsTo Groups, GroupRole belongsTo Role (GroupRole is hasManyThrough table)

Group hasMany GroupRole, Group belongsTo Department

Department hasMany Group, Department belongsTo District

District hasMany Department

関係図

于 2013-03-19T08:42:31.787 に答える