Laravel 8のseederでFakerを使う

Laravel Laravel

Laravel 8のseederでFakerを使う手順

SeederとFactoryを作成する

参考にしたサイトなどには特に記載がなかったので、Seederはテーブル名と同名のクラス名に、FactoryはModelと同名のクラス名にしています。(ややこしい😅)

Seederを作成します。

php artisan make:seeder PeopleTableSeeder

作成されたSeeder。

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class PeopleTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        //
    }
}

Factoryを作成します。

php artisan make:factory PersonFactory

作成されたFactory。

<?php

namespace Database\Factories;

use App\Models\Person;
use Illuminate\Database\Eloquent\Factories\Factory;

class PersonFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Model::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
            //
        ];
    }
}

app.phpの設定を変更する

app.phpのFakerの言語を日本語に設定します。

    // 'faker_locale' => 'en_US',
    'faker_locale' => 'ja_JP',

Factoryを編集する

Factoryを編集します。サンプルのコードをコメントアウト(もしくは削除)して、「追記」の部分を追記します。

<?php

namespace Database\Factories;

use App\Models\Person;
use Illuminate\Database\Eloquent\Factories\Factory;

class PersonFactory extends Factory
{
    /**
     * The name of the factory's corresponding model.
     *
     * @var string
     */
    protected $model = Person::class;

    /**
     * Define the model's default state.
     *
     * @return array
     */
    public function definition()
    {
        return [
       // 'カラム名' => 設定したい値,
            'name' => $this->faker->name,
            'mail' => $this->faker->safeEmail,
            'age' => $this->faker->numberBetween(0, 100),
        ];
    }
}

Seederを編集する

Seederを編集します。

<?php

namespace Database\Seeders;

use App\Models\Person;    // 追記
use Illuminate\Database\Seeder;

class PeopleTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        Person::factory()->count(100)->create();    // 追記
    }
}

DatabaseSeederを編集する

DatabaseSeederを編集して、Seederを実行できるようにします。

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
        $this->call(PeopleTableSeeder::class);    // 追記
    }
}

Seederを実行する

ターミナルからSeederを実行します。

php artisan db:seed

このようにレコードがインサートされていればOK!

参考にさせていただいたサイト

Laravel8 テストデータ - Qiita
Laravelバージョン8のテストをFactoryとSeederを使って行っていきます。また、Laravelバージョン8はこれまでと記述の仕方が異なるので注意してください。#Seeder・See…
[Laravel5.1]Fakerチートシート - Qiita
#はじめにテストを行う上でFactry利用してダミーデータ生成しようと思ったらfakerの使い方がわからない。調べてみたけどこれと言って情報もない。調べ方が下手なだけ?ということで自分用にチー…
この記事を書いた人

余分なこだわりは捨てる。それがぼくのスタイル。

PHPでWebアプリを作り、小さな花の写真を撮ってよろこんでいる人。元Webエンジニア。プログラミング講師。余分なこだわりを捨てて生きやすくなりたいと思いつつも、なかなかこだわりを捨てきれない頑固者。まろと呼んでください。

さかのうえの まろをフォローする
Laravel
シェアする