我正在尝试添加与工厂模型的关系以进行一些数据库播种,如下所示 - 注意我正在尝试向每个用户添加 2 个帖子
public function run()
{
factory(App\User::class, 50)->create()->each(function($u) {
$u->posts()->save(factory(App\Post::class, 2)->make());
});
}
但它抛出以下错误
Argument 1 passed to Illuminate\Database\Eloquent\Relations\HasOneOrMany::s
ave() must be an instance of Illuminate\Database\Eloquent\Model, instance
of Illuminate\Database\Eloquent\Collection given
我认为这与保存收藏有关。如果通过分别为帖子调用每个工厂模型来重新编写代码,它似乎可以工作。显然这不是很优雅,因为如果我想坚持 10 或发布给每个用户,那么我必须 decalare 10 或行,除非我使用某种 for 循环。
public function run()
{
factory(App\User::class, 50)->create()->each(function($u) {
$u->posts()->save(factory(App\Post::class)->make());
$u->posts()->save(factory(App\Post::class)->make());
});
}
\* 更新 *
有没有办法将模型工厂嵌套到第三层深?
public function run()
{
factory(App\User::class, 50)
->create()
->each(function($u) {
$u->posts()->saveMany(factory(App\Post::class, 2)
->make()
->each(function($p){
$p->comments()->save(factory(App\Comment::class)->make());
}));
});
}
原文由 adam78 发布,翻译遵循 CC BY-SA 4.0 许可协议
从 Laravel 5.6 开始,有一个回调函数 afterCreating 和 afterMaking 允许你在创建/创建之后直接添加关系:
现在
将为您提供 50 个用户,每个用户有 10 个帖子,每个帖子有一个评论。