【Laravel8】テストデータ作成はこれ一択 ファクトリーとfaker
こんにちは。今回はモデルファクトリーとfakerという機能を使って、Laravelでダミーデータを生成していきたいと思います。この2つの機能を使えば簡単に開発用のダミーデータを生成することができます。多少覚える手順は多いのですが、覚えてしまえば開発の大きな味方になってくれると思います。それでは見ていきましょう。
データベースへの接続と作成
今回はデータベースにsqliteを使用します。sqliteの設定方法は過去の記事を参照してください。Laravelでsqliteデータベースに接続する
また、本記事で取り扱うテーブルを事前に作成してください。過去の記事【Laravel】マイグレーションでテーブル作成の手順で作成できます。
Eloquentモデルの作成
まずはテーブルを操作するためのEloquentモデルを作ります。以下のコマンドを実行してください。app/Models配下にPostクラスが作られます。
$ php artisan make:model Post
# 成功時のメッセージ
Model created successfully.
モデルファクトリーの作成
モデルファクトリーとはモデルを生成する工場(ファクトリ)です。ダミーデータを生成する役割を持っています。
Postモデルを生成するファクトリークラスを作成します。クラス名はPostFactoryとします。–modelオプションを付けることで、使用するEloquentモデルを指定することができます。先程作成したPostモデルを使用するために–model=Postとします。成功するとdatabase/factories/PostFactory.phpが作成されます。
$ php artisan make:factory PostFactory --model=Post
# 成功時のメッセージ
Factory created successfully.
作成されたPostFactoryクラスが次のコードです。definitionメソッドが一つ存在するだけのクラスが作成されます。definitionの中でテストデータの内容を定義していくことになります。また、ファクトリーを作成する際に–model=PostでPostモデルを指定しましたので$model変数にPostクラスが指定されて、Postクラスを使う準備が整っています。
<?php
namespace Database\Factories;
use App\Models\Post;
use Illuminate\Database\Eloquent\Factories\Factory;
class PostFactory extends Factory
{
/**
* The name of the factory's corresponding model.
*
* @var string
*/
protected $model = Post::class;
/**
* Define the model's default state.
*
* @return array
*/
public function definition()
{
return [
//
];
}
}
definitionメソッドの中身を作りましょう。このメソッドはモデルの1データ分の項目を連想配列で返すように記述します。今回値はfakerで自動生成するようにします。$this->fakerでfakerを参照し、その後に用途に合わせて自動生成用のメソッドを付与します。例えばcontent列は記事の内容が入るのでrealTextメソッドを使用しています。
public function definition()
{
return [
'title' => $this->faker->title(),
'content' => $this->faker->realText(),
'user_id' => $this->faker->randomDigit()
];
}
fakerでは様々なダミーデータを作ることができます。リファレンスで調べて使いましょう。私は次のサイトを使って調べました。https://fwhy.github.io/faker-docs/
Seederの作成と実行
ファクトリーが完成したら、シーダー(Seeder)を作成します。シーダーはファクトリーで生成したダミーデータをデータベースに登録する役割を持ちます。今回はPostTableSeederを作成します。
$ php artisan make:seed PostsTableSeeder
# 成功時のメッセージ
Seeder created successfully.
Seederを作成するとrunメソッドが作られています。runメソッドはSeeder実行時に呼ばれるメソッドなので、この中にダミーデータ作成処理を記述していきます。先程作成したファクトリーを呼び出して、モデルを生成してみましょう。countメソッドに作成するデータ件数を指定し、createメソッドを実行します。
public function run()
{
\App\Models\Post::factory()->count(50)->create();
}
最後にPostTableSeederを呼び出すためのコードを記述します。Seederは全てdatabase/seeders/DatabaseSeeder.phpから呼び出して使います。先程作成したPostTableSeederを登録しましょう。
public function run()
{
$this->call(PostsTableSeeder::class);
}
artisan db:seedコマンドでSeederを実行しましょう。
$ php artisan db:seed
#成功時の実行結果
Seeding: Database\Seeders\PostsTableSeeder
Seeded: Database\Seeders\PostsTableSeeder (1,850.64ms)
Database seeding completed successfully.
これでPostsテーブルにダミーデータを50件作成することができました。
ディスカッション
コメント一覧
まだ、コメントがありません