⬆️ 回到顶部 ⬅️ 上一个 (Artisan) ➡️ 下一个 (日志与调试)
使用工厂类进行填充数据时,您可以在插入记录后提供回调函数来执行某种操作。
$factory->afterCreating(App\User::class, function ($user, $faker) {
$user->accounts()->save(factory(App\Account::class)->make());
});
你是否知道伪造类 (Faker) 不仅可以生成文本值,还可以生成图像?看此处的 avatar 字段,它将生成一个 50x50 的图像:
$factory->define(User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => bcrypt('password'),
'remember_token' => Str::random(10),
'avatar' => $faker->image(storage_path('images'), 50, 50)
];
});
当使用工厂类创建记录时,可以使用序列类 (Sequence) 来输入自定义逻辑并将值覆盖
$users = User::factory()
->count(10)
->state(new Sequence(
['admin' => 'Y'],
['admin' => 'N'],
))
->create();
当使用带关联关系的工厂时,laravel
也提供了魔术方法:
// magic factory relationship methods
User::factory()->hasPosts(3)->create();
// instead of
User::factory()->has(Post::factory()->count(3))->create();
由 @oliverds_提供
有时,您可能希望update
给定的模型,而不发送任何事件。您可以使用updateQuietly
方法来完成此操作
Post::factory()->createOneQuietly();
Post::factory()->count(3)->createQuietly();
Post::factory()->createManyQuietly([
['message' => 'A new comment'],
['message' => 'Another new comment'],
]);
Laravel工厂有一个非常有用的for
方法。您可以使用它来创建belongsTo
关系。
public function run()
{
Product::factory()
->count(3);
->for(Category::factory()->create())
->create();
}
由 @mmartin_joo提供