Laravelで複数の単語(products + categoryとか)を組み合わせたテーブル名を使用する場合、テーブル名・モデル名についてはきちんとした命名規則があるものの、ルーティング設定でどのようなURLにするかは決まりがありません。

一般的なお作法としてどうなのかを検索してみても、出てくるのはusersとかpostsとかcommentsとか1つの単語を例としたものばかりでほとんど情報がなかったので、個人的に調べた結果をまとめてみました。

今回の事例

ログインの履歴を残すテーブルを作ることにします。

テーブル名とモデル名

テーブル名 login_records 複数形、スネークケース
モデル名 LoginRecord 単数形、アッパーキャメルケース

これは規則通りの命名ですね。

コントローラー名

コントローラー名 LoginRecordsController 複数形、アッパーキャメルケース

こちらも規則通りの命名です。

URL(ルーティング設定)をどうするか?

あれこれと検索した結果、こちらを参考にしました。
https://laracasts.com/discuss/channels/laravel/naming-uri-resources-with-two-words

上記リンクの中で「Use dashes in the URI pattern but camelCase for the route parameter」と記載がありました。個人的にも思っていた通りだったので、以下で問題ないと思います。

  • ちなみに上記リンクのディスカッションでは、途中からコントローラーの命名を単数形にするか複数形にするかに話が逸れています。英語が母国語じゃない人には単数形の方が分かりやすいよねと言っていたり。今回は慣習に則って複数形にしています。
  • また、ディスカッションの途中で「これ解決した?私も同じ悩みを抱えてるんだけど」的な催促もあることから、意外と悩んでいる人は多いのかもと思ってみたり。
  • そして結局、質問者は一つの単語に無理やり縮めるという荒業に出て乗り切ったみたいです。

個人的まとめ

テーブル名 login_records
モデル名 LoginRecord
コントローラー名 LoginRecordsController
URL login-records/{loginRecord}