larvel リレーションの方法 多対多
laravelで多対多のリレーションしていきます。
環境
laravel 8.x
突然ですが、日本は1夫1妻制です。(当たり前・・・)
でも、もし多夫多妻制だったらだれがだれと結婚しているか管理するのは大変かと思います。(突然すぎる提案・・・)
今回は多夫多妻制をデータベース化して多対多のリレーションをしてみたいと思います。
データーベース構成はこんな感じになるかと思います。
夫テーブルー中間テーブルー妻テーブル
それでは順番に作っていきたいと思います。
1.夫テーブルとモデルを作成しテーブルの型や属性を決める
php artisan make:model husband -m
2.妻テーブルとモデルを作成しテーブルの型や属性を決める
php artisan make:model wife -m
テーブルの型等はhusbandsテーブルと一緒なので省略
テーブル名はモデル名の複数形になります。
husband→husbands
wife→wives
ちゃんと不規則変化の複数形になっています。
英語が苦手な方はテーブルとモデルを一緒に作成するコマンドを利用した方が間違いないと思います。(これでハマる人もいると推測)
php artisan migrate
3.中間テーブルを作成する
php artisan make:migration create_husband_wife_table --create=husband_wife
※中間テーブルの命名は関連モデル名のアルファベット順にしてください。
4.facrotyで大量にテストデータ作成
php artisan make:factory husbandFactory
php artisan make:factory wifeFactory
WivesFactoryはageカラムの最小値を16に変更するだけなので省略。
5.husbansテーブルとwivesテーブルにテストデータを挿入
6.husbandモデルと wifeモデルで多対多のリレーションをする
7.husbandsテーブルのデータとwivesテーブルのデータを紐づけ
husbandsテーブルのid86番とwivesテーブルのid24番を紐づけ。
リレーションでデータが取得できている事を確認。
登録を削除はdetach()をする
一括して登録や削除をする場合はsync()を利用する。
sync()は登録されていたIDは削除、登録されていないIDは登録になます。
id86番の人が35,56,78,100番とリレーションできています。
多対多のリレーションの方法をやってみました。
これで日本に多夫多妻制が導入されても安心ですね(笑
作成日:2021-03-06
更新日:2021-03-07