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.
実際にテーブルを確認すると、下記のように登録できました。
Seederを指定して実行する
php artisan db:seed
でDatabaseSeeder.php
に書いたSeederを実行することができました。
DatabaseSeeder.php
に書かなくても、Seederを指定して実行する方法もあります。
--class
オプションで作成したSeederを指定すると、指定したSeederのみが実行されます。
php artisan db:seed --class FruitSeeder
コメント