laravelのモデル結合ルート(show()やedit()の引数が、$idじゃなくて$モデル変数名)について

laravelのモデル結合ルート(show()やedit()の引数が、$idじゃなくて$モデル変数名)について

みたいに、コントローラー・モデル・マイグレーションを一気に作ると、コントローラーのshow()やedit()の引数が$idから$モデル変数名に変わっている。
これは、モデル結合ルートと言って、$idで渡すとfindやwhereで検索コードを書かないと行けない所が、urlから$idを渡しておけば自動的に取得した状態でメソットに渡されるらしい(対応するレコードがない場合は404エラー)

便利といえば便利なんだけど、いくつか制限があって

https://localhost/project/1
で、プロジェクトレコードを表示させる時は、暗黙的にprojectsテーブルのID=1のレコードを取得してくれるが

php artisan route:listで以下のように表示されてる

みたいなルーティングの場合は駄目みたい(get引数の1に当たる{aaa}が、Projectモデルと名前が一致していないから)

対処(明示的な結合)としては2つあって
1, resourceとは別に、web.phpに追加

2, {project}の別名に{aaa}を追加する

php artisan route:listで以下のように表示されるが、{project}が割り当てられる。元のproject/{project}も普通に使える。

まあ、基本的にURLパスとテーブル名は一致させましょう!って事なんだろうけどね…。
ちなみに、idカラム以外をキーに使いたい時は、以下のメソッドをモデルファイルに追加する

コメントを残す

メールアドレスが公開されることはありません。