【Laravel】Factory(Faker)でダミーデータを追加する方法

Laravel

今回は、LaravelのFactoryでダミーデータ(テストデータ)を追加する方法について紹介します!

スポンサーリンク

Factory(Faker)とは?

LareaveのFactoryはSeederの一つになります。

テーブルへ大量のデータを追加する際に使われることが多く、

実際の現場でも開発を始める時などに活用していました。

スポンサーリンク

開発環境

Mac OS Monterey12.3.1

MAMP (PHP7.4.21 )

Composer version2.3.5

テーブル作成

今回は『Purchasehistories』テーブルを用意しました。

カラム名Null
idINT
product_nameTEXT
priceINT
purchase_dateDATE

テーブル作成方法については下記に記載してます!

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

Laravel - The PHP Framework For Web Artisans
Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing ...

コメント

タイトルとURLをコピーしました