複数駅と複数路線など、多対多のRestful CRUD API@laravel8

複数駅と複数路線など、多対多のRestful CRUD API@laravel8

それぞれ路線名・駅名を追加
$table->string(‘name’);

多対多のリレーションは、中間テーブルを使う

各モデルで、中間テーブルとひもづける

App\Models\Line

App\Models\Station

DatabaseSeeder.php

routes/api.php

LineController.php(StationController.phpも同じ感じで)

各路線の各駅が表示される
http://localhost/laravel8/public/api/line

StationController.phpからのみ、駅の追加と、所属する路線の追加・削除・更新を行えるようにする(親に対しての中間テーブルのCRUDが行える)
LineController.phpからは出来ないようにする(親に対しての中間テーブルのCRUDは出来ないようにする)

山手線に上野駅を追加する(INSERT)

既存の駅に対して路線を変更。
中央線に変更してたり(UPDATE)、除外したり(DELETE)、新しい路線を追加したり(INSERT)してみた。

多対多なので、親子関係にもできないので、意外とややこしかった・・・。
駅レコード本体の情報とは別に、リレーション先の路線レコードのCRUDも同時にするのでややこしい!

attach/detachするよりも、allRelatedIdsでリレーション先の全IDを取得して、そこに修正してsyncで上書きする方が楽だな。
ちゃんと差分を見て、既存レコードは上書きされない(created_at,updated_atがそのまま)ので、syncが一番だと思う。