好的,我们假设我的帖子模型的属性为name
,slug
和content
。我想用我的ModelFactory生成模型,但想要设置一个特定的名称,我通过覆盖该值来完成:
factory(App\Post::class)->create(["name" => "Something here"]);
但是现在我想通过使用(新)名称和来自动生成slug而不将其作为参数传递。喜欢
"slug" => str_slug($name);
这是可能的还是我需要手动编写slug?
当使用->create(['name' => 'anything']);
下面的工厂时,不会创建slug。
$factory->define(App\Post::class, function (Faker\Generator $faker) {
static $name;
return [
'name' => $faker->name,
'slug' => $name ?: str_slug($name),
'content' => $faker->sentences(),
];
});
答案 0 :(得分:10)
这应该可以解决问题。您可以手动传递名称或让Faker处理它。
$factory->define(App\Post::class, function (Faker\Generator $faker) {
return [
'name' => $faker->name,
'slug' => function (array $post) {
return str_slug($post['name']);
},
'content' => $faker->sentences(),
];
});
答案 1 :(得分:1)
你试过吗
$name ="Something here";
factory(App\Post::class)->create(["name" => $name, "slug" => str_slug($name)]);