LaravelでSeederを使う方法!(初期データを登録する)

Laravel Laravel

LaravelでSeeder(シーダー)を使用して、データベースのテーブルに対して初期データを登録する方法について書いています。
簡単なSeederを作成して、実際に使ってみています。

掲載しているサンプルコードはLaravel8で検証しています。
Seederについて書いている公式のドキュメントはこちらです。

LaravelのSeeder(シーダー)とは?

LaravelのSeederは、データベースに初期データを登録するために使用します。
最初から用意しておきたいマスターデータやテスト用のデータを作成するときに使えます。

作成したSeederを実行するにはartisanコマンドを使用します。

php artisan db:seed

このコマンドを実行すると、現在接続しているデータベースに対して作成したSeederを実行できます。

次項から実際にSeederを作成して、確認してみます。

Seederを作成して、登録データを記述する

Seederを作成した後に、編集して登録するデータを記述していきます。
Seederの作成もartisanコマンドを使用して行います。

Seederを作成する

下記のようにmake:seederでSeederを作成できます。

php artisan make:seeder FruitSeeder

コマンドの後にSeederのファイル名を書きます。
今回はFruitSeederを作成してみました。

実行が完了すると、下記のようにSeederファイルの作成が完了したことが確認できます。

$ php artisan make:seeder FruitSeeder
Seeder created successfully.

Seederのファイルはdatabase/seeders配下に配置されます。
作成されたFruitSeeder.phpファイルの初期状態は下記のようになっています。

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class FruitSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

runメソッドがSeederを実行したときに処理されるメソッドです。
ここに登録処理を書いていきます。

今回はFruitテーブルという下記のテーブルを用意していますので、こちらにデータを登録する処理を書いてみました。
テーブルに対してのModelも用意しています。

カラム名 内容
id bigint テーブルのID
name varchar(255) フルーツの名前
color varchar(255) フルーツの色
price int 値段

Seederに登録データを記述する

作成したファイルを下記のように編集しました。

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use App\Models\Fruit;

class FruitSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Fruit::create([
            'name' => 'リンゴ',
            'color' => '赤',
            'price' => '100',
        ]);

        Fruit::create([
            'name' => 'ぶどう',
            'color' => '紫',
            'price' => '300',
        ]);

        Fruit::create([
            'name' => 'みかん',
            'color' => '黄',
            'price' => '110',
        ]);
    }
}

まず、use文でFruitモデルを使用するようにしています。
その後にrunメソッドにインサート処理を書いています。

fruitテーブルに対して、Eloquentを使用して3つの果物情報をインサートするようにしました。
createメソッドに連想配列を渡すことでインサートできます。
左側のキーがカラム名になって、右側の値がカラムに格納される値です。
Eloquentの使い方については、先ほど紹介したリンク先のこちらをご確認ください。

ここまでで、Seederファイルの作成と登録データの記載が完了しました。

DatabaseSeederを編集する

作成したSeederファイルは、database/seeders/DatabaseSeeder.phpから呼び出すようにして使用します。
今回は下記のように編集しました。

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(FruitSeeder::class);
    }
}

作成したSeederクラスをcallメソッドに渡しているだけです。

今回はファイルがひとつだけなので、ひとつだけ定義しましたが、複数記載することも可能です。
複数記載する際にも同じようにcallメソッドを書いて、Seederのクラスを呼ぶだけです。

Seederを実行する

あとはSeederを実行すると、対象のテーブルにデータがインサートされます。
実際に下記のように実行してみます。

php artisan db:seed

実行すると、このようにデータベースに対して処理が完了したことが確認できます。

php artisan db:seed
Seeding: Database\Seeders\FruitSeeder
Seeded:  Database\Seeders\FruitSeeder (33.59ms)
Database seeding completed successfully.

実際にテーブルを確認すると、下記のように登録できました。
LaravelのSeederでデータ登録

Seederを指定して実行する

php artisan db:seedDatabaseSeeder.phpに書いたSeederを実行することができました。
DatabaseSeeder.phpに書かなくても、Seederを指定して実行する方法もあります。

--classオプションで作成したSeederを指定すると、指定したSeederのみが実行されます。

php artisan db:seed --class FruitSeeder

コメント

タイトルとURLをコピーしました