もくじ
はじめに
シーダーファイルを作成して実行する通常の手順は過去にまとめています。
以前は、作ったファイルをひとつひとつシーダー実行をしていました。
しかし、シーダーファイルの数が増えてくると実行するコマンドもその分の数を実行せねばならず少し面倒に感じることもあると思います。
その面倒を解消するため、いくつもあるシーダーファイルを一括で実行できるようにしてみます。
シーダーファイル作成
$ php artisan make:seeder OneTestsTableSeeder $ php artisan make:seeder TwoTestsTableSeeder $ php artisan make:seeder ThreeTestsTableSeeder $ php artisan make:seeder FourTestsTableSeeder
今回は4つシーダーファイルを作ります。
そして、これらの実際シーダーファイルと別にシーダー実行用のシーダーファイルを作成します。
シーダー実行ファイルを作成
Laravelをインストールした時点ですでに用意されているDatabaseSeeder.php
ファイルを用います。
ファイルの場所:database > seeds > DatabaseSeeder.php
下記のようにrunメソッドの中に、callメソッドを使って呼び出したいクラスを追記します。
<?php use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder { /** * データベース初期値設定の実行 * * @return void */ public function run() { $this->call([ OneTestsTableSeeder::class, TwoTestsTableSeeder::class, ThreeTestsTableSeeder::class, FourTestsTableSeeder::class, ]); } }
注意点
call
メソッドを使って、一括で実行したいシーダークラス名を渡します。そのため、シーダーファイルを作成するたびに、ここに記述する必要があります。
ここで留意しておきたいことは、外部キーを設定している場合における呼び出す順番です。
例えば、OneTestsTable
の中でTwoTestsTable
のキーを外部キーに設定している場合はTwoTestsTable
を先に実行する必要があります。
詳しくはこちらの記事にまとめています。
実行
Composerのオートローダを再生成するために、dump-autoload
コマンドを実行する必要があります。
$ composer dump-autoload
データベースへ初期値を設定するためにdb:seed Artisan
コマンドを使用します。
$ php artisan db:seed Database seeding completed successfully.
successfullyと出れば、問題なくシーダー実行完了です。
DatabaseSeeder.php
で指定したファイルがすべて実行されたかどうか、テーブルを確認しましょう。
OneTests
テーブル、TwoTests
テーブル、ThreeTests
テーブル、FourTests
テーブルの中にデータが投入されていれば成功です。