And*_*kiy 1 factory laravel laravel-5.6
让我们假设这个工厂:
后工厂.php
$factory->define(Post::class, function (Faker $faker) {
return [
'title'=>$faker->word,
'user_id'=>factory(User::class)->create()->id
];
});
Run Code Online (Sandbox Code Playgroud)
然后我像这样使用它:
$user = factory(User::class)->create();
factory(Post::class, 5)->create(['user_id'=>$user->id]);
Run Code Online (Sandbox Code Playgroud)
我希望将创建 1 个用户和 5 个帖子。但实际上数据库中有6个用户,因为PostFactory无论是否user_id通过都会创建用户。
如果user_id属性传递给create方法,有没有办法阻止创建新用户?
有一个解决方法。
$factory->define(Post::class, function (Faker $faker) {
return [
'title'=>$faker->word,
'user_id'=> function () { return factory(User::class)->create()->id; }
];
});
Run Code Online (Sandbox Code Playgroud)
Laravelvalue()在合并属性时正在调用帮助程序。如果user_id存在于属性中,则不会执行回调,否则会执行。