【Laravel初期構築】UserとRoleのModel(モデル)・リレーション・Seeder・Factory・マイグレーションの設定方法

LaravelでWebアプリケーションを作成する仕事をいただくようになったため、自分への備忘録も兼ねて、初期構築時に必須の【UserとRoleの構築】を紹介します。

マイグレーション作成

まずはLaravelの雛形をダウンロードします。ターミナルから

と入力して、任意のプロジェクト名でLaravelプロジェクトを作成してください。

Laravelの場合、UsersテーブルやUserモデルは最初から生成されているため、RolesテーブルとRoleモデルを作成します。

※「-m」はマイグレーションファイルも一緒に作成するためのオプション。

上記コマンドを実行すると、

  • Roleモデル
  • Rolesテーブル作成用のマイグレーションファイル

が作成されます。

テーブル作成

ここから、実際にファイルを編集して、UsersテーブルとRolesテーブルを作成していきます。

「database/migrations/日付_create_users_table.php」ファイルを以下のように

次は、先ほど作成した「database/migrations/日付_create_roles_table.php」ファイルを以下のように

編集してください。

これでデータベースにUsersテーブルとRolesテーブルを作成する準備ができました。ターミナルから

を実行してください。

そうすると、

このような形で、role_idを持つUsersテーブルRolesテーブルが作成されます。

※うまく作成されない場合は、DBとlaravelが接続されていない可能性があります。「.env」ファイルを編集してください。

リレーションの作成

UsersテーブルとRolesテーブルが作成できたので、2つの関係を定義するリレーションも設定しましょう。

Userは必ず一つのRoleに属します。そのため、UserモデルとRoleモデルのリレーションを設定しなければなりません。

今回はUserがNに対して、Roleが1なので、belongsToの関係をもちます。

laravelのリレーションの記述はシンプルで上記をUser.phpの最後に追加します。

これでUserとRoleの関係を定義することができました。

SeederとFactoryの作成

アプリを作るだけなら、リレーションまで完了すれば十分です。

しかし、何度もデータを整理してアプリを作ったり、複数人でアプリを開発する場合、データベースに初期レコードを設定しておくべきです。

Laravelでデータベースへの初期レコードを設定する場合、SeederとFactoryを使用します。

まずは、Rolesテーブルの初期レコード設定用のSeederを作成するために、

をターミナルから実行してください。

作成された「database/seeds/RolesTableSeeder.php」ファイルを

このように編集します。

これで、Rolesテーブルに

  • id: 1,  name: admin
  • id: 2,  name: subscriber

という2つの初期レコードを設定することができるようになりました。

 

Rolesテーブルへの初期レコード設定が完了したので、最後にUsersテーブルへの初期レコードを設定します。

毎回同じ値を設定するRolesテーブルへの初期レコード設置と異なり、Usersテーブルはランダムにユーザーが登録されるようにします。

また、気をつけなければならない点は、「userは必ず1つのroleをもつということ」

そのため、さきほど設定したRolesテーブルのidをランダムでrole_idに格納しなければなりません。

まずは、Factoryファイルを作成します。ターミナルから

を実行し、ファイルの中身(database/factories/UserFactory)を

に変更して下さい。

ここでの実装のポイントは、role_idに対してRole::all()->random()を使って、Roleテーブルが持っているidをランダムに保有させていること。

たったこれだけでRoleとUserを紐づけてダミーユーザーを作成することができます。

最後に、database/seeds/DatabaseSeeder.phpファイルを

このように編集します。これは、RolesTableSeederを実行した後、ランダムユーザーを10人作成する命令を記述しています。

この状態でターミナルから、

を実行すると、
※「php artisan migrate:refresh」はdbを綺麗に作り直している。

このような形で、

  • 設定した2つのロールが格納されたrolesテーブル
  • rolesテーブルのroleをランダムに保有した10件のレコードをもつusersテーブル

が作成されます。

 

以上でLaravelのUserとRoleの初期構築は完了です。

UserとRoleはアプリケーションを作る上で必ず必要な機能ですので、是非、参考にしてください!

ABOUTこの記事をかいた人

新卒ノマドエンジニアとして独立し、半年で月収100万円を達成する。フリーランスのエンジニアとして活動しながら、事務所を売却(バイアウト)したり、Youtuber(最高月間視聴回数109万回、チャンネル登録者1万人)をしたり、Openrecの公式配信者としてゲーム生実況をしたり、ベンチャー企業のCOOをしたり、パラレルキャリアを歩んでいる。 2019年にミニマムライフコストを不労所得で稼げるようになったため、いまは好きなことだけ仕事にしています。