【发布时间】:2015-12-09 00:58:37
【问题描述】:
我正在尝试添加与工厂模型的关系以执行一些数据库播种,如下所示 - 请注意,我正在尝试为每个用户添加 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());
}));
});
}
【问题讨论】:
-
模型有一个 saveMany() 方法,它接受 Collection 对象。试试
$u->posts()->saveMany(factory(App\Post::class, 2)->make());。但是,请记住,这仍会在后台生成 2 个保存查询,它不会持续存在一个查询。 -
@Yasen:saveMany() 方法有效。有没有办法将模型工厂嵌套到更深的第 3 层?请参阅更新后的帖子了解我的意思。
-
有没有找到2层以上嵌套的解决方案?
标签: php laravel-5 relationship factory