はじめに
こんにちは!
Factoryとfakerを使ってダミーデータを大量に作成したので、使い方を書きます。
環境
Laravel: 6.8
MySQL: 8.0
手順
fakerの言語設定
まず、はじめにダミーデータの言語を設定します。
デフォルトで英語になっているので、日本語に変更します。
config/app.php
'faker_local' => 'ja_JP' // 変更
ファイル作成
次にモデル・マイグレーション・ファクトリーを作成します。
ターミナルでphp artisan make:model Models\Test -m -f
のコマンドを入力します。
テーブルの作成
まず、DBにテーブルとカラムを作成します。
先ほどのコマンドでTestモデルに紐づいたマイグレーションファイルが作成されているので、その中にコードを追加します。
database/migrations/作成日_create_tests_table.php
public function up()
{
Schema::create('tests', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name', 50);
$table->string('user_name', 50);
$table->string('sex', 1);
$table->string('post_code', 7);
$table->string('address');
$table->string('email');
$table->string('tel');
$table->string('password');
$table->string('text', 100);
$table->integer('number');
$table->timestamps();
});
}
今回はこんな感じで適当なカラムでテーブルを作成します。
Factoryの作成
ここが本題です。
Factoryファイルの中にダミーデータを作成する際のルールみたいのを記述します。database/factories/TestFactory.php
use App\Models\Dummy;
use Faker\Generator as Faker;
$factory->define(Test::class, function (Faker $faker) {
return [
'name' => $faker->name(), // 名前 姓名
'user_name' => $faker->unique()->userName(), // ユーザー名
'sex' => $faker->randomElement(['男', '女']), // 配列内の文字をランダムに出力 今回は男or女
'post_code' => $faker->regexify('[1-9]'), // 正規表現で郵便番号7桁を出力
'address' => $faker->address(), // 住所 郵便番号も
'email' => $faker->email(), // メールアドレス
'tel' => $faker->phoneNumber(), // 電話番号
'password' => $faker->password(), // パスワード
'text' => $faker->realText(20), // ランダムに日本語文を20文字で出力
'number' => $faker->numberBetween(10, 100) // 10~100の数字をランダムに出力
];
});
こんな感じでテーブルのカラムに合わせて、作成して欲しいデータを追加します。
seederファイルの作成
factoryができたらseederファイルを作ります。
database/seeds/TestTableSeeder.php
public function run()
{
factory(Test::class, 50)->create();
}
先ほどのfactoryを元に50件のダミーデータを作成してもらいます。
あとはDatabaseSeeder.phpに登録します。
title=DatabaseSeeder.php
public function run()
{
$this->call(TestTableSeeder::class);
}
実行
ここまでできたら、あとはphp artisan migrate --seed
もしくはphp artisan migrate:fresh --seed
を実行します。
エラーなく終えて、ダミーデータが作成されていれば無事完了です。
最後に
大量のダミーデータ作れるから、csvの扱いもまとめてみるかな。。
あと、公式にいい感じのfakerチートシートみたいのあればいいな。。