モデルファクトリとは、eloquentで利用できるテストデータを楽に挿入するための仕組みになります。
モデルファクトリには、fakerと呼ばれる偽のデータを作成する仕組みが利用出来ます。
モデルファクトリの利用方法について
definitionメソッドで利用します。
public function definition()
{
return [
'name' => $this->faker->name(),
'email' => $this->faker->unique()->safeEmail(),
'email_verified_at' => now(),
'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
'remember_token' => Str::random(10),
];
}
factoryの生成
php artisan make:factory BookFactory
database/factoriesディレクトリに配置されます。
model上で HasFactoryをuseすると使えます。
class Book extends Model
{
use HasFactory;
}
factoryの利用
// 1ユーザ作る
$user = User::factory()->make();
// 3ユーザ作る
$users = User::factory()->count(3)->make();
// factoryを上書きして利用する
$user = User::factory()->make([
'name' => 'Abigail Otwell',
]);
$user = User::factory()->make([
'name' => 'Abigail Otwell',
'email' => 'testtest@example.net'
]);
// App\Models\Userインスタンスを一つ作成
$user = User::factory()->create();
// App\Models\Userインスタンスを3つ作成
$users = User::factory()->count(3)->create();
makeとcreateの違い
makeは、モデルの新しいインスタンスを作成します。なので、saveとかしないとDBに保存されない。
createは、Eloquentのsaveメソッドを利用してデータベースに保存されます。
create、makeのソースをみると、createはsaveメソッドを読んでいて、makeは、instanceを返している
/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Factories/Factory.php