Seeder
テストデータをデータベースに設定するための機能。シーダークラスはdatabase/seeds
に保存する。
デフォルトでDatabaseSeeder
クラスが定義されている。このクラスからcall
メソッドで他のシーダークラスを呼び出すことで、シーディングの順番をコントロールできる。
テーブル名について
今回の作業をするにあたって、テーブル名の最後にsをつけたほうが都合がよい。
例えば、テーブル:hoges , データ(1レコード):hoge のようなイメージ。
シーダークラスの生成
$ php artisan make:seeder HogesTableSeeder
シーダークラスを利用するためにはDatabaseSeederクラスに呼び出したいクラスを追加します。
public function run ()
{
$this->call(HogesTableSeeder::class);
}
シーダーの実行
// DataBaseSeederを実行する
$ php artisan db:seed
// 特定のファイルを個別に実行する
$ php artisan db:seed --class=HogesTableSeeder
データベースを完全に再作成したい場合は以下のコマンドが便利。
$ php artisan migrate:refresh --seed
シーダーの編集
HogesTableSeeder.php
public function run()
{
//
$now = \Carbon\Carbon::now();
for ($i = 1; $i <= 10; $i++) {
$hoge = [
'name' => 'user' . $i,
'mail' => 'user' . $i . '@localhost',
'created_at' => $now,
'updated_at' => $now,
];
DB::table('hoges')->insert($hoge);
}
}
Faker
より現実に近いテストデータを簡単に作成できるライブラリ。
作成できるダミーデータは主に次の通り。
項目名 | 出力データ |
---|---|
name | 氏名 |
メールアドレス | |
safeEmail | メールアドレス |
password | パスワード |
address | 住所 |
phoneNumber | 電話番号 |
company | 企業名 |
realText | テキスト |
// 初期化
$faker = Faker\Factory::create('ja_JP');
// データの取得
$faker->name
$faker->email
Fakerの生成するデータのロケールを変更したい場合、設定ファイルでも変更できる。
config/app.php に以下を追加する。
'faker_locale' => 'ja_JP',
Factory
大量のデータベースレコードを作成するのに便利。
モデルクラスを作成する。app配下にHoge.phpが作成される。
$ php artisan make:model Hoge
ファクトリークラスを作成する。database/factories
フォルダにHogeFactory.php
が作成される。
$ php artisan make:factory HogeFactory
HogeFactory.phpの編集。
<?php
use Faker\Generator as Faker;
$factory->define(App\Hoge::class, function (Faker $faker) {
$now = \Carbon\Carbon::now();
return [
//
'name' => $faker->name,
'mail' => $faker->email,
'comment' => $faker->realText,
'created_at' => $now,
'updated_at' => $now,
];
});
HogesTableSeeder.phpの編集。
<?php
use Illuminate\Database\Seeder;
class HogesTableSeeder extends Seeder
{
public function run ()
{
// 50レコード作成する
factory (\App\Hoge::class, 50)->create();
}
}
DatabaseSeeder.phpの編集。
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
public function run ()
{
$this->call(HogesTableSeeder::class);
}
}
実行。
$ php artisan db:seed
以上です。
参考
- 竹澤勇貴・栗生和明・新原雅司・大村創太郎(2018)『PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5LTS対応』ソシム
- Laravel Document