(cakephp) アソシエーションで複数のモデルを操作
アソシエーション
モデル同士のデータの関連を設定することで、一度のデータ操作で複数モデルからデータを取得したり、データを更新する機能。
内部の処理では、自動的にSQLにJOINを追加したり、関連データを再度取得するクリエを実行するなどして必要なデータを取得する。
findメソッドのrecursiveオプション指定で、処理ごとに関連データを取得する範囲を限定できる。
⭐︎アソシエーションの種類
リレーションシップ アソシエーション名 例 1 対 1 hasOne 桃太郎は絵本である(ジャンル重なるのない) 1 対 多 hasMany 桃太郎は「面白い」、「子供に人気」、「また読みたい」という複数のレビューを持っている。 多 対 1 belongsTo 「面白い」、「子供に人気」、「また読みたい」という複数のレビューは桃太郎のことだ。 多 対 多 hasAndBelongsToMany 桃太郎とバカの壁は、新書であり、絵本であり、ベストセラーである。
A belongsTo (多対1)
- モデルが別のモデルのデータに所属している。
複数のレビューは1冊の本に属している。( = 「「面白い」、「泣ける」、「また読みたい」など複数のレビュー」は「ゼロ」に属している。)
{ 新着レビュー一覧から1冊の本を調べたい☆
外部キーを自分側に持っている!!!!
B hasOne (1 対 1)
モデルが別のモデルのデータを所有する。
1冊の本は唯一の出版年月日を持っている。( = 「ゼロ」は「2015年3月3日」の出版年月日を持っている。)
{ 1冊の本から出版年月日を調べる☆
hasOneは、相手(出版年月日tb)の方に主キーを持っている。
C hasMany (1 対 多)
モデルが別のモデルの複数のデータを所有する。
1冊の本は複数のレビューを持っている。( = 「ゼロ」は「面白い」、「泣ける」、「また読みたい」など複数のレビューも持っている。)
{「ゼロ」から、そのレビューを探したい。
hasManyは、相手(レビューtb)の方に主キーを持っている。
D hasAndBelongsToMany (多対多)
多対多の関係でモデルとモデルを結びつけるアソシエーション
お互いにhasManyの関係、belongsToの関係が成り立たない複数の本は、文庫本であり、ペストセラーである。
☆キー
className → 所属先のデータを扱うモデルクラス。
foreignKey → アソシエーション先のモデルを検索するための外部キー。
associationForeignKey → アソシエーション先のもう一方のモデルを検索するための外部キー。