などの疑問や悩みを解決してまいります。
Seeder(シーダー)とは
LaravelにおいてSeeder(シーダー)とは、データベースに初期データを登録するための機能です。
テストデータや開発環境で必要なデータを簡単に挿入できるため、手動で入力する手間を省けます。
Seederファイルの作成
Seederファイルの作成方法は、以下のコマンドを実行します。
// ファイル名はアッパーキャメルで書く
php artisan make:seeder {シーダーファイル名}
// 例
php artisan make:seeder TestsTableSeeder
作成が成功すると以下のメッセージが表示されます。
作成された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を実行して、指定したテーブルにデータを登録します。
今回データを登録するデータベーステーブルは以下のようにシンプルな構造にしています。
カラム名 | データ型 | 制約 | 説明 |
---|---|---|---|
id | BIGINT | PRIMARY KEY, AUTO_INCREMENT | ユーザーの一意のID |
name | VARCHAR(255) | NOT NULL | ユーザーの名前 |
created_at | TIMESTAMP | NOT NULL, DEFAULT CURRENT_TIMESTAMP | レコード作成日時 |
updated_at | TIMESTAMP | NULL, 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を編集します。
<?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
ファイルごとに個別に実行したい場合は以下のコマンドを実行してください。
php artisan db:seed --class={シーダーファイル名}
成功したらデータベースのtests
テーブルを確認して下さい。
以下のようにデータが登録されていたらOKです。
id | name | created_at | updated_at |
1 | Test 1 | 2024-09-19 07:17:56 | 2024-09-19 07:17:56 |
2 | Test 2 | 2024-09-19 07:17:56 | 2024-09-19 07:17:56 |
3 | Test 3 | 2024-09-19 07:17:56 | 2024-09-19 07:17:56 |
まとめ
LaravelのSeeder機能は、開発やテストの環境を素早く整えることができます。
データ作成を手動で行うのはかなり手間で時間もかかってしまうので、ぜひこの記事を参考にSeeder機能を活用してください。