ダミーデータの作成
データベースの実装をテストする際にダミーデータが必要になる場合があります。ダミーデータとは、仮のデータのことで大量に用意する必要がある場合もあり、人力でデータを入力するのは現実的ではありません。そこでLaravelでは自動で大量のダミーデータを生成する仕組みがあります。
FactoryとSeeder
Factoryはモデルに関連付けられたダミーデータを生成する仕組みで、テストデータの生成の構造の設定を行います。一方、Seederはデータベースにダミーデータを挿入する仕組みで、Factoryを利用したり、直ですデータを指定したりしてテストデータを生成します。
Factoryの記述方法
Factoryを実際に作ります。まず、下記のコマンドでFactoryファイルを作成します。今回は以前作成したbooksテーブルのダミーデータを生成するために作成します。
php artisan make:factory BookFactory
上記のコマンドを実行するとdatabase/factories/BookFactory.phpが作成されます。生成されたファイルの中身を以下のように書き換えます。
<?php
namespace Database\Factories;
use App\Models\Book;
use Illuminate\Database\Eloquent\Factories\Factory;
/**
* @extends \Illuminate\Database\Eloquent\Factories\Factory<\App\Models\Book>
*/
class BookFactory extends Factory
{
protected $model = Book::class;
/**
* Define the model's default state.
*
* @return array<string, mixed>
*/
public function definition(): array
{
return [
"title" => $this->faker->word(),
"author" => $this->faker->name(),
"price" => random_int(0, 2000),
];
}
}
ダミーデータはfakerを使用します。整数に関してはfakerでなく乱数を使用します。model変数には紐づけるモデルを指定します。
モデルの編集
モデルのBook.phpに以下のようにコードを追加します。
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class Book extends Model
{
use HasFactory;
protected $fillable = [
"title",
"author",
"price",
];
}
HasFactoryを記述することで、Factoryとモデルを紐づけることができます。
Seederの記述方法
次に、Seederを記述します。以下のコマンドでSeederを作成します。今回は、以前作成したbooksテーブルのダミーデータを生成するプログラムを記述します。
php aritsan make:seeder BookSeeder
上記のコマンドを実行すると、database/seeder/BookSeeder.phpが生成されます。生成されたファイルの中身を以下のように書き換えます。
<?php
namespace Database\Seeders;
use App\Models\Book;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
class BookSeeder extends Seeder
{
/**
* Run the database seeds.
*/
public function run(): void
{
Book::factory()->count(50)->create();
}
}
Bookモデルに紐づけられているfactoryメソッドのcountで生成するダミーデータの個数を指定します。ここでは、50としています。createでダミーデータの生成を実行します。
Seederの実行
次に作成したSeederを実行します。以下のコマンドで実行します。
php artisan db:seed --class=BookSeeder
以下のコマンドで、データベースにダミーデータが登録されていれば成功です。
select * from books;
複数のSeederの同時実行
Seederはまとめて実行することができます。DatabeseSeeder.phpのrunメソッドに以下のように記述します。
$this->call([
UserSeeder::class,
BookSeeder::class,
]);
その後、以下のコマンドを実行します。
php artisan db:seed
以上で、ダミーデータの生成は終了です。
今回は、データベースのテストなどに使用するダミーデータの生成について解説しました。次回は、ビューの共通化について解説します。