LoginSignup
7
7

More than 3 years have passed since last update.

Laravel6.xでよく使うコマンド一覧 〜マイグレーションからモデルやコントローラそしてフォームリクエスト作成まで〜

Last updated at Posted at 2020-04-06

個人的によく使うコマンドの使用例

コマンド一覧を見てもオプション関係がゴッチャになるので、定型文的によく使うLaravelのコマンドをメモ。
バージョンはLaravel 6.x です。最近リリースされた7では確認していませんが、確認が取れたらまた更新します。

マイグレーション関連

Composerのオートローダを再生成


composer dump-autoload

シーダクラスを作成した後などは、Composerのオートローダを再生成するためにこちらのコマンドを実行する必要があります。

マイグレーションのエラー
// コマンド例
$ php artisan migrate:fresh --seed

// (中略)エラー内容
Illuminate\Contracts\Container\BindingResolutionException  : Target class [Product] does not exist.

例えば上記のような、シーディングやマイグレーション時にデータベースのエラーが出るときは大体このコマンドを忘れているパターンが多いです。
DatabaseSeeder.phpに該当のSeederクラスは登録したし、クラス名やファイル名にも間違いがないのに、ターゲットとなるクラスが存在しませんよというエラーになっています。
gitからdevelopやmasterなどリモートブランチの変更をpullしてきて、マイグレーションファイルに変更があった際などにも同様のエラーになりがちです。
composer dump-autoload のコマンドを打たなくてもエラーにならない場合もあり、例えば元々あったシーダーを編集してシーディングし直した場合は必要なさそうでした。

マイグレーションファイルの作成

php artisan make:migration create_users_table --table=users

オプションを付加しながらマイグレーションファイルの作成。--table=の後にテーブル名を記載します。
コマンドを実行した日時によって、例えば下記のように、 年_月_日_時間+指定した名前 といったファイル名でマイグレーションファイルは作成されます。
2020_02_19_155441_create_users_table.php

テーブル作成だけでなく、「カラムの修正」や「外部キーの設定」とか、操作したい内容によって modify_colmn_type_user_id_on_users.phpadd_foreign_keys_to_users_tableなど、わかりやすい名前にすると良いかと思います。

シーダーファイルの作成

php artisan make:seeder UsersTableSeeder

データベースにテストデータを流し込むための入れ物を作ります。
今回の場合はUsersテーブル用のシーダーということになります。
テーブル名は各自で適切なものを設定してください。

マイグレーションのやり直しと同時にシーディング

php artisan migrate:fresh --seed

今あるテーブルを全ドロップしてテーブルを作り直し、DatabaseSeeder.phpに登録されたシーダーを同時に実行します。

php artisan migrate:refresh などでエラーになったときは、この php artisan migrate:fresh で解消することもあります。

シーディングのみ実行

php artisan db:seed

マイグレーションとは別にDatabaseSeeder.phpに登録されたシーディングだけ実行したいときはこちらのコマンドを打ちます。

特定のシーダー、クラスのシーディングのみ実行

php artisan db:seed --class=UsersTableSeeder

DatabaseSeeder.phpに登録していないものや、登録はしたが個別にシーダーを実行したいという際に使用します。
--class=の後にシーダーのクラス名を指定すればOKです。

フォームリクエスト関連

リクエスト作成

フォームリクエストは要するにバリデーションに使用するもので、コントローラなどにリクエストで送られた値が入ってくる前にいろいろバリデーションでさばいた結果のものをリクエストとして送ってくれるので、コントローラとバリデーションを分離することができます。
コントローラをスカスカのペラッペラにしたい人は特に使うと良いでしょう。

php artisan make:request UserRequest

リクエストの名前は何でも良いです。
公式では php artisan make:request StoreBlogPost
のような名前がサンプルとして掲載されていますが、自分はそれが何であるか分かりやすくするために XxxRequest のような命名を好んで使います。

モデル・コントローラ関連

モデル作成

php artisan make:model User

モデルを作ります。通常Laravelでは、テーブル名は複数形、モデル名はテーブル名の単数形とします。

php artisan make:model Models/User

モデルを /app/Models/以下など別なディレクトリにまとめたいときはこのように書きます。

モデルと同時にコントローラ作成

php artisan make:controller UserController

コントローラを作ります。こちらもテーブル名の単数形が良いです。
指定した名前でコントローラが作成され、今回の場合はUserController.phpというファイル名になります。

php artisan make:controller UserController --model=Models/User

モデルも一緒に作成したい場合は後ろにオプションを付けて作成可能です。
--model=Userとすればappディレクトリ配下にUser.phpのモデル用ファイルができますが、モデル用のディレクトリを切って管理したい場合などは --model=Models/User とすればapp/Modelsのディレクトリ配下にモデルが作成されます。

php artisan make:controller UserController --resource

自分でイチからfunctionを書かなくても、最初からCRUD処理用のメソッドをpublic functionとして最初に用意しておいてくれるのが上記のように --resource のオプションを付けた場合です。
これらは下記のように繋げて書くことで一度に実行できます。

php artisan make:controller UserController --resource --model=Models/User

--resource のオプションを付けた場合は、公式のドキュメントにあるように、下記のルートに紐づけられるメソッドが入れ物として用意されていますので、メソッドの内容は開発時に適宜上書きしていきます。

 動詞       | URI                  | アクション | ルート名
------------------------------------------------------------------
 GET       | /photos              | index   | photos.index
 GET       | /photos/create       | create  | photos.create
 POST      | /photos              | store   | photos.store
 GET       | /photos/{photo}      | show    | photos.show
 GET       | /photos/{photo}/edit | edit    | photos.edit
 PUT/PATCH | /photos/{photo}      | update  | photos.update
 DELETE    | /photos/{photo}      | destroy | photos.destroy

このリソースフルな状態でコントローラを作成すれば、下記のようにルートを定義すれば1行ですべてをまかなえます。

web.php
Route::resource('photos', 'PhotoController');

ただ自分はすべてのリソースを使う必要がなく、URL(URI)も/photos/{photo}/edit等から変更したいということも多く、割と従来通りに自分でルートの定義はしていたりします。

今日はいったんそんな感じです。

参考URL

■マイグレーション -> Laravel 6.x データベース:マイグレーション
■シーディング -> Laravel 6.x データベース:シーディング
■モデル -> Laravel 6.x Eloquent:利用の開始
■コントローラ -> Laravel 6.x コントローラ
■フォームリクエスト -> Laravel 6.x バリデーション

7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7