Seederの使い方メモ
テーブルを作成したのは良いが、データが何も無い状態だと、何も試すことができません。 そこで、ダミーのレコードを用意する為にシーディングという機能を利用します。
以下を実行するとdatabase/seed/
にシーディング用のファイルが作成されます。
php artisan make:seeder HogeTableSeeder
作成されたseederファイルは以下です。 runメソッド内にレコードを作成する処理を書いていきます。
<?php
use Illuminate\Database\Seeder;
class HogeTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
//
}
}
seedファイルにレコードを追加します。
class HogeTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
$param = [
'name' => 'taro',
'age' => '20',
'sex' => 'male'
];
DB::table('persona') -> insert($param);
$param = [
'name' => 'jiro',
'age' => '30',
'sex' => 'male'
];
DB::table('persona') -> insert($param);
}
}
最後に/database/seeds/DatabaseSeeder.php
にseedファイルを登録します。
<?php
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
$this->call(HogeTableSeeder::class);
}
}
実行します。
php artisan db:seed
テーブルにレコードが追加されます。
上記のコマンド実行時にTarget class [XXXXXXTableSeeder] does not exist.
のエラーが発生する場合があります。
その場合はcomposer dump-autoload
を実行することで解消するみたいです。
Fackerでダミーデータを利用する
seederファイルを利用して、ダミーデータを登録することができましたが、 一つずつ定義していくのはなかなか面倒です。
Laravelには標準でダミー生成用のライブラリFackerが入っています。 もし入ってなければ以下で追加します。
composer require fzaninotto/faker
Fackerの使い方
Fackerで設定できる内容はこちらの記事が参考になりました。 もしくはライブリのgithubページが参考になります。
① Modelを作成
php artisan make:model Hoge
モデルの定義はこんな感じです。
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Hoge extends Model
{
protected $table = 'hoge';
protected $guarded = array('id');
public $timestamps = true;
protected $fillable = [
'name', 'email', 'age', 'thumbnail'
];
}
②Factory クラスを作成
直接seederファイルに定義しても良いが、データの生成処理はFactoryクラスを利用する。
以下でFactoryクラスを作成。
php artisan make:factory HogeFactory
database/factories/HogeFactory.php
が作成される。
FactoryクラスにFakerを利用したダミーデータの生成処理を追加していく。
<?php
/* @var $factory \Illuminate\Database\Eloquent\Factory */
use Faker\Generator as Faker;
$factory->define(App\Hoge::class, function (Faker $faker) {
return [
'name' => $faker ->name,
'email' => $faker ->email,
'age' => $faker ->numberBetween($min = 20, $max = 60),
'thumbnail' => $faker -> imageUrl()
];
});
③seederファイルでFactoryクラスを実行
<?php
use Illuminate\Database\Seeder;
class HogeTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
DB::table('persona')->delete();
//ダミーデータを10個作る
factory(App\Hoge::class, 10)->create();
}
}
Fakerのダミーデータを日本語化する
ダミーデータを日本語かするためには以下の設定を変更します。 config/app.php
の以下の設定を変更します。
'faker_locale' => 'ja_JP',