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の使い方がわからない。調べてみたけどこれと言って情報もない。調べ方が下手なだけ?ということで自分用にチー…