Factoryを作成する
Factroyとは
ここでは、会社テーブルとそれに紐づく仕事テーブルという構造でデータを作成してみる
(モデルやmigrationの作成は割愛)
id | name |
1 | 会社A |
id | company_id | title |
1 | 1 | 仕事タイトルA |
- CompanyFactoryとJobFactoryを作成
php artisan make:factory CompanyFactory
php artisan make:factory JobFactory
- 生成されたFactoryファイルの
definition
メソッドを編集する
<?php
namespace Database\Factories;
use App\Models\Company;
use Illuminate\Database\Eloquent\Factories\Factory;
class CompanyFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Company::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
// ⭐️ 変更
return [
'name' => $this->faker->company,
];
}
}
<?php
namespace Database\Factories;
use App\Models\Job;
use Illuminate\Database\Eloquent\Factories\Factory;
class JobFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Job::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
// ⭐️ 変更
return [
'title' => $this->faker->realText(),
];
}
}
fakerでランダム生成される値が日本語になるように設定変更
- config/app.php
// 'faker_locale' => 'en_US',
'faker_locale' => 'ja_JP',
念のため設定キャッシュクリア
php artisan config:cache
ダミーデータ生成用のSeederを作成する
- 上記で作成したFactoryを実行するためのSeederを作成
php artisan make:seed DummyDataSeeder
- まずは
Company
を生成してみる
<?php
namespace Database\Seeders;
use App\Models\Company; // ⭐️ 追加
use Illuminate\Database\Seeder;
class DummyDataSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// ⭐️ 追加
Company::factory(3)->create();
}
}
- 実行
php artisan db:seed --class=DummyDataSeeder
- 実行結果
$this->faker->company
によりランダムな会社名が生成されてる
Laravelで用意されている、ダミーデータを生成するためのツール
このモデルファクトリを使用することで各Eloquentモデルのデフォルト属性を定義する
ファクトリ内ではfaker (=様々な種類のランダムデータを生成できるライブラリ) を使用できるので、効率よくダミーデータを生成することが可能になる