プロジェクトをユーザーに割り当てるプロジェクト管理システムを作成しています
ProjectsUser
モデルの作成と2つの$belongsTo
関係の定義、およびHABTM
両方Project
とUser
モデルの関係の定義の違いは何ですか?しかし、最も正しい方法は何でしょうか?projects_users
また、データをテーブルに保存するにはどうすればよいですか?
プロジェクトをユーザーに割り当てるプロジェクト管理システムを作成しています
ProjectsUser
モデルの作成と2つの$belongsTo
関係の定義、およびHABTM
両方Project
とUser
モデルの関係の定義の違いは何ですか?しかし、最も正しい方法は何でしょうか?projects_users
また、データをテーブルに保存するにはどうすればよいですか?
私の経験から、結合テーブル(2つのIDを持つもの)からのみ行を保存または削除できるようにしたい場合は、hasManyとbelongsToの両方の関連付けによって関連付けられた3つのモデルを使用する方がはるかに簡単です。
結合テーブルから直接データを取得して、必要なクエリをはるかに簡単に実行することもできます
これは、CakePHPのドキュメントがHABTMを参照してデータを保存すると言っていることです。
ただし、ほとんどの場合、HABTMアソシエーションを使用する代わりに、上記の例に示すように、結合テーブルのモデルを作成し、hasMany、belongsToアソシエーションを設定する方が簡単です。
ここでより多くの全文を見つけることができます:http: //book.cakephp.org/2.0/en/models/saving-your-data.html#what-to-do-when-habtm-becomes-complicated
私はこのメソッドを「読み取り」テーブル(post_idとuser_id)だけでなく、サブスクリプションや同様の種類の関係にも使用しました。
最初の方法は「hasAndBelongsToMany」と呼ばれます[詳細はこちら]。
2つ目は「hasManythrough」と呼ばれます[詳細はこちら]。
「hasManythrough」に関連する2番目のリンクには、いつ、なぜそれを使用するかについての詳細と長い説明があります。
Cakephpの詳細についてはわかりませんが、一般に、リレーションモデルを明示的に定義すると、たとえば、このリレーションの作成時に何らかの検証を行ったり、コールバックを追加したりする場合に、より詳細に制御できます。