のぐそんブログ

暗いおじさんがシコシコ書くブログです。

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',