【发布时间】:2017-10-22 18:10:03
【问题描述】:
根据 Laravel 的documentation on defining relationships within model factories:
您还可以使用工厂定义中的闭包属性将关系附加到模型。例如,如果您想在创建 Post 时创建一个新的 User 实例,您可以执行以下操作:
$factory->define(App\Post::class, function ($faker) {
return [
'title' => $faker->title,
'content' => $faker->paragraph,
'user_id' => function () {
return factory(App\User::class)->create()->id;
}
];
});
我遇到的问题是关系定义中对@987654323@ 的引用。在我看来,这不属于这里。
如果我想将我的关系与数据库持久化,它会非常有用:
factory(App\Post::class)->create();
通过直接运行上面的代码,将创建一个新的App\Post 和一个新的App\User,并将它们都持久化到数据库中。
但是,如果我只想 new 更新模型而不是通过运行将任何东西(根本)保存到数据库:
factory(App\Post::class)->make();
它在一定程度上做了我想做的事。一个新的App\Post 实例被创建但没有被持久化,但是App\Comment 被创建并被持久化到数据库中。
在我看来,我真正想要的是这样的:
$factory->define(App\Post::class, function ($faker) {
return [
'title' => $faker->title,
'content' => $faker->paragraph,
'user_id' => function () {
// here I only want to declare the relationship,
// not decide whether I want to create() or make()
// the relationship, something like:
return factory(App\User::class)->createOrMake()->id;
// or perhaps something like:
return factory(App\User::class)->id;
}
];
});
最终结果是我希望相关数据能够尊重我从调用顶部开始尝试执行的操作。做一切。或者创造一切。
我在这里做错了吗?或者这是目前不存在的东西?
谢谢!
【问题讨论】:
-
嗨,我面临同样的问题。你是怎么解决这个问题的?
-
@Zalo 我没有。 :(
标签: php laravel eloquent phpunit