【Laravel】シーダーを一括で実行

もくじ

はじめに

シーダーファイルを作成して実行する通常の手順は過去にまとめています。

bonoponz.hatenablog.com

以前は、作ったファイルをひとつひとつシーダー実行をしていました。

しかし、シーダーファイルの数が増えてくると実行するコマンドもその分の数を実行せねばならず少し面倒に感じることもあると思います。

その面倒を解消するため、いくつもあるシーダーファイルを一括で実行できるようにしてみます。

シーダーファイル作成

$ 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を先に実行する必要があります。

詳しくはこちらの記事にまとめています。

bonoponz.hatenablog.com

実行

Composerのオートローダを再生成するために、dump-autoloadコマンドを実行する必要があります。

$ composer dump-autoload

データベースへ初期値を設定するためにdb:seed Artisanコマンドを使用します。

$ php artisan db:seed
Database seeding completed successfully.

successfullyと出れば、問題なくシーダー実行完了です。

DatabaseSeeder.phpで指定したファイルがすべて実行されたかどうか、テーブルを確認しましょう。

OneTestsテーブル、TwoTestsテーブル、ThreeTestsテーブル、FourTestsテーブルの中にデータが投入されていれば成功です。

参考URL

データベース:シーディング 7.x Laravel