今回は、LaravelのFactoryでダミーデータ(テストデータ)を追加する方法について紹介します!
Factory(Faker)とは?
LareaveのFactoryはSeederの一つになります。
テーブルへ大量のデータを追加する際に使われることが多く、
実際の現場でも開発を始める時などに活用していました。
開発環境
Mac OS Monterey12.3.1
MAMP (PHP7.4.21 )
Composer version2.3.5
テーブル作成
今回は『Purchasehistories』テーブルを用意しました。
カラム名 | 型 | Null |
id | INT | ◯ |
product_name | TEXT | ◯ |
price | INT | ◯ |
purchase_date | DATE | ◯ |
テーブル作成方法については下記に記載してます!
Modelsを作成
$ php artisan make:model Purchasehistories
Laravelで上記コマンドを実行します。
Modelsディレクトリ内に『Purchasehistories.php』が作成されます。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Purchasehistory extends Model
{
use HasFactory;
/**
* データ登録日.
*/
const CREATED_AT = null;
/**
* データ更新日.
*/
const UPDATED_AT = null;
/**
* 許可カラム.
*/
protected $fillable = [
'id',
'product_name',
'price',
'purchase_date',
];
}
Factoryファイルを作成
$ php artisan make:factory PurchasehistoryFactory
上記コマンドを実行し、Factoryファイルを作成します。
factoriesディレクトリに『PurchasehistoryFactory.php』が作成されます。
『use Faker\Generator as Faker;』の追加と、『definition()』内にどのようなデータを挿入するか記述します。
<?php
namespace Database\Factories;
use Illuminate\Database\Eloquent\Factories\Factory;
use App\Models\Purchasehistory;
use Faker\Generator as Faker;
class PurchasehistoryFactory extends Factory
{
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
$price = $this->faker->numberBetween($min=1000, $max=20000);
return [
'id' => rand(1,5),
'product_name' => $this->faker->randomElement(['アウター','トップス','Tシャツ'.'ボトムス','ジーンズ']),
'price' => $price,
'purchase_date' => $this->faker->date(),
];
}
}
わかる方もいらっしゃるかと思いますが、下記どのような記述を行ったか解説します。
$price = $this->faker->numberBetween($min=1000, $max=20000);
1000〜20000の間の数値でランダムに挿入するように設定し、「$price」へ。
return [
'id' => rand(1,5),
'product_name' => $this->faker->randomElement(['アウター','トップス','Tシャツ','ボトムス','ジーンズ']),
'price' => $price,
'purchase_date' => $this->faker->date(),
];
id → 1〜5の数値の中からランダムで設定
product_name → アウター,トップス,Tシャツ,ボトムス,ジーンズのいずれかを挿入するよう設定
price → 事前に設定した『$price』を呼び出します。(1000〜20000の間の数値をランダムで設定)
purchase_date → ランダムの日付を設定
Seederファイルを作成
$ php artisan make:seed PurchasehistoryTableSeeder
Laravelで上記コマンドを実行します。
seedersファイル内に『PurchasehistoryTableSeeder.php』が作成されます。
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
use App\Models\Purchasehistory;
class PurchasehistoryTableSeeder extends Seeder
{
/**
* Run the database seeds.
*
* @return void
*/
public function run()
{
Purchasehistory::factory()->count(50)->create();
}
}
下記部分を、『PurchasehistoryTableSeeder.php』へ記述します。
Purchasehistory::factory()->count(50)->create();
『DatabaseSeeder.php』修正
seedersディレクトリの『DatabaseSeeder.php』へ、
下記『CustomerTableSeeder.php』を呼び出すためのコードを追加していきます。
$this->call(PurchasehistoryTableSeeder::class);
<?php
namespace Database\Seeders;
use Illuminate\Database\Seeder;
class DatabaseSeeder extends Seeder
{
/**
* Seed the application's database.
*
* @return void
*/
public function run()
{
// \App\Models\User::factory(10)->create();
// $this->call(CustomerTableSeeder::class);
$this->call(PurchasehistoryTableSeeder::class);
}
}
.envファイル修正(データを日本語対応にする設定)
必須ではありませんが、日本語でデータを追加する設定を紹介しておきます。
config/app.phpの修正
/*
|--------------------------------------------------------------------------
| Faker Locale
|--------------------------------------------------------------------------
|
| This locale will be used by the Faker PHP library when generating fake
| data for your database seeds. For example, this will be used to get
| localized telephone numbers, street address information and more.
|
*/
// 'faker_locale' => 'en_US',
'faker_locale' => env('FAKER_LOCALE', 'ja_JP'),
上記のように「’faker_locale’ => env(‘FAKER_LOCALE’, ‘ja_JP’),」を追加します。
.envファイルの修正
FAKER_LOCALE=ja_JP
最終行に上記を追加します。
$ php artisan cache:clear
.envファイルを変更したため、キャッシュクリアをしておきます。
Seederファイルの実行
$ php artisan migrate:refresh –-seed
上記コマンドを実行することで自動的にfakerが起動し実行されます。
成功した場合は、DBにデータが追加されます。
挿入されているかテーブルを確認
id、price、purchase_dateはランダムで、product_nameは日本語のランダムで追加されていることが確認できました。
まとめ
LaravelでFactoryを用いてダミーデータを登録する方法を紹介しました。
①テーブルを作成
②Modelsファイルを作成
③Factoryファイルを作成
④『PurchasehistoryFactory.php』を修正
⑤Seederファイルを作成
⑥『DatabaseSeeder.php』修正
⑤.envファイル修正
⑥Seederファイルの実行
上記の流れでダミーデータを作成することができるので参考にしてみてください。
最後までご覧いただきありがとうございました!
PR
参考資料
・Laravel8 Release Note
コメント