I'm trying to add a relation to a factory model to do some database seeding as follows - note I'm trying to add 2 posts to each user
public function run()
{
factory(AppUser::class, 50)->create()->each(function($u) {
$u->posts()->save(factory(AppPost::class, 2)->make());
});
}
But its throwing the following error
Argument 1 passed to IlluminateDatabaseEloquentRelationsHasOneOrMany::s
ave() must be an instance of IlluminateDatabaseEloquentModel, instance
of IlluminateDatabaseEloquentCollection given
I think its something to do with saving a collection. If re-write the code by calling each factory model for the post separately it seems to work. Obviously this isn't very elegant because if I want to persist 10 or post to each user then I'm having to decalare 10 or lines unless I use some kind of for loop.
public function run()
{
factory(AppUser::class, 50)->create()->each(function($u) {
$u->posts()->save(factory(AppPost::class)->make());
$u->posts()->save(factory(AppPost::class)->make());
});
}
* UPDATED *
Is there any way to nest the model factory a 3rd level deep?
public function run()
{
factory(AppUser::class, 50)
->create()
->each(function($u) {
$u->posts()->saveMany(factory(AppPost::class, 2)
->make()
->each(function($p){
$p->comments()->save(factory(AppComment::class)->make());
}));
});
}
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…