【Laravel】Seeder(シーダー)機能の使い方!データベースにデータを投入する方法を解説

Laravel PHP

【Laravel】Seeder(シーダー)機能の使い方!データベースにデータを投入する方法を解説

なやむくん
Laravelでデータベースにダミーデータを登録したい…。
なやむさん
LaravelのSeeder機能について知りたい。

などの疑問や悩みを解決してまいります。

Seeder(シーダー)とは

LaravelにおいてSeeder(シーダー)とは、データベースに初期データを登録するための機能です。

テストデータや開発環境で必要なデータを簡単に挿入できるため、手動で入力する手間を省けます。

みつた
データ登録を手動で行うのは手間なので、Seederを実行してデータ登録を楽に行いましょう。

Seederファイルの作成

Seederファイルの作成方法は、以下のコマンドを実行します。

// ファイル名はアッパーキャメルで書く
php artisan make:seeder {シーダーファイル名}


// 例
php artisan make:seeder TestsTableSeeder

作成が成功すると以下のメッセージが表示されます。

Seeder [database/seeders/TestsTableSeeder.php] created successfully.

作成されたSeederファイルは、database/seeders内に追加されています。

Seederファイルの中身

作成したSeederファイルを見ていきましょう。

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class TestsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
        //
    }
}

Seederを実行するとrun()メソッドが実行されます。

みつた
run()メソッドの中に、登録するデータを記述します。

Seeder実行の準備

Seederを実行して、指定したテーブルにデータを登録します。

今回データを登録するデータベーステーブルは以下のようにシンプルな構造にしています。

カラム名データ型制約説明
idBIGINTPRIMARY KEY, AUTO_INCREMENTユーザーの一意のID
nameVARCHAR(255)NOT NULLユーザーの名前
created_atTIMESTAMPNOT NULL, DEFAULT CURRENT_TIMESTAMPレコード作成日時
updated_atTIMESTAMPNULL, ON UPDATE CURRENT_TIMESTAMPレコード更新日時
登録先のテーブル構造

TestsTableSeeder.phpの編集

TestsTableSeeder.phpを以下のように編集します。

<?php

namespace Database\Seeders;

use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB; // 追加

class TestsTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     */
    public function run(): void
    {
    // 登録するデータ
        DB::table('tests')->insert([
            [
                'name' => 'Test 1',
                'created_at' => now(),
                'updated_at' => now(),
            ],
            [
                'name' => 'Test 2',
                'created_at' => now(),
                'updated_at' => now(),
            ],
            [
                'name' => 'Test 3',
                'created_at' => now(),
                'updated_at' => now(),
            ],
        ]);
    }
}

DBファサードをインポート

データベース操作に関するファサードDBをインポートしています。

use Illuminate\Support\Facades\DB
みつた
DBファサードは、Laravelでデータベース操作を簡単に行うための機能です。これを使用すると、クエリビルダや生のSQLクエリを実行したり、データベース接続を管理したりすることができます。

DB::table('tests')

インポートしたDBファサードを使って、testsという名前のテーブルを指定しています。

insert()

insert()メソッドは、testsテーブルにデータを挿入するメソッドです。

ここでは配列で複数のレコードを一度に挿入しています。

みつた
insert()メソッドを使って、複数のレコードを一度にまとめてデータベースに挿入する方法を「バルクインサート」とも言います。

DatabaseSeeder.phpの編集

登録するデータの設定ができましたら、次にDatabaseSeeder.phpを編集します。

みつた
DatabaseSeeder.phpは、database/seeders内にあります。
<?php

namespace Database\Seeders;

// use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     */
    public function run(): void
    {
        $this->call([
            TestsTableSeeder::class // 追加
        ]);
    }
}

DatabaseSeeder.phpでは、複数のSeederクラスをまとめて実行する役割を果たします。

run()

run()メソッドが実行されると、次に説明するcall()メソッド内に指定されたSeederクラスが順次呼ばれて、データベースにデータが登録されます。

今回はTestsTableSeeder.phpに設定しているデータをtestsテーブルに登録したいので、TestsTableSeeder::classを記述します。

$this->call()

call()メソッドは、指定したSeederクラスを呼び出して実行します。

みつた
今回の場合、TestsTableSeederクラスを呼び出し、データ登録を実行しています。

Seederの実行

実行準備が整いましたので、以下コマンドを実行します。

php artisan db:seed
INFO Seeding database.

ファイルごとに個別に実行したい場合は以下のコマンドを実行してください。

php artisan db:seed --class={シーダーファイル名}
INFO Seeding database.

成功したらデータベースのtestsテーブルを確認して下さい。

以下のようにデータが登録されていたらOKです。

idnamecreated_atupdated_at
1Test 12024-09-19 07:17:562024-09-19 07:17:56
2Test 22024-09-19 07:17:562024-09-19 07:17:56
3Test 32024-09-19 07:17:562024-09-19 07:17:56
Seeder実行後のtestsテーブル

まとめ

LaravelのSeeder機能は、開発やテストの環境を素早く整えることができます。

データ作成を手動で行うのはかなり手間で時間もかかってしまうので、ぜひこの記事を参考にSeeder機能を活用してください。

  • この記事を書いた人
  • 最新記事

みつた

完全未経験&異業種から30歳の年でIT企業に転職。

Web系開発言語が好き。
どちらかというとバックエンドよりもフロントエンドが好き(現時点では…)

最近はサウナと観葉植物にハマっている。
野球が好きで一応投手。

-Laravel, PHP