個人的によく使うコマンドの使用例
コマンド一覧を見てもオプション関係がゴッチャになるので、定型文的によく使う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.php
や add_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行ですべてをまかなえます。
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 バリデーション