Seederとは
テストデータをデータベースに設定するための機能。シーダーはdatabase/seeds
に保存する。
デフォルトでDatabaseSeederクラスが定義されている。このクラスからcallメソッドで他のシーダーを呼び出すことで、シーディングの順番をコントロールできる。
テーブル名について
Seederを使うに当たって、テーブル名を複数形で定義した方が都合が良い。
例えば、テーブル名hoges、レコードhogeのようなイメージ。
シーダーを生成してみる
シーダーを作成するには以下のコマンドを実行します。作成されたシーダーはdatabase/seeds
に格納されます。
$ php artisan make:seeder HogesTableSeeder
シーダーを利用するためにはDatabaseSeederに呼び出したいシーダーを追加します。
database/seeds/DatabaseSeeder.php
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$this->call(HogesTableSeeder::class);
}
}
シーダーを編集してみる
database/seeds/HogesTableSeeder.php
<?php
use Illuminate\Database\Seeder;
class HogesTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
// ここにレコードを追加処理を記述する
$now = \Carbon\Carbon::now();
for ($i = 1; $i <= 50; $i++) {
$hoge = [
"name" => "name" . $i,
"mail" => "user" . $i . "@localhost",
"created_at" => $now,
"updated_at" => $now,
];
DB::table("hoges")->insert($hoge);
}
}
}
シーダーを実行してみる
// DataBaseSeederを実行する
$ php artisan db:seed
// 特定のファイルを個別に実行する
$ php artisan db:seed --class=HogesTableSeeder
testapp_db=# select * from hoges;
id | name | mail | comment | type | created_at | updated_at
----+--------+------------------+---------+------+---------------------+---------------------
1 | name1 | user1@localhost | | C | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
2 | name2 | user2@localhost | | C | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
3 | name3 | user3@localhost | | C | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
4 | name4 | user4@localhost | | C | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
5 | name5 | user5@localhost | | C | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
6 | name6 | user6@localhost | | C | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
7 | name7 | user7@localhost | | C | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
8 | name8 | user8@localhost | | C | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
9 | name9 | user9@localhost | | C | 2019-07-11 01:41:02 | 2019-07-11 01:41:02
(以下略)
データベースを完全に再作成したい場合は、以下のコマンドが便利。
$ php artisan migrate:refresh --seed