Ich versuche, eine Beziehung zu einem Fabrikmodell fügen Sie einige Datenbank Aussaat zu tun, wie folgt - man beachte ich versuche 2 BeiträgeHinzufügen von Beziehungen zu Laravel Factory-Modell
public function run()
{
factory(App\User::class, 50)->create()->each(function($u) {
$u->posts()->save(factory(App\Post::class, 2)->make());
});
}
Aber sein für jeden Benutzer hinzufügen den folgenden Fehler werfen
Ich denke, es ist etwas mit dem Speichern einer Sammlung zu tun. Wenn Sie den Code neu schreiben, indem Sie jedes Fabrikmodell für den Post separat aufrufen, scheint es zu funktionieren. Offensichtlich ist das nicht sehr elegant, denn wenn ich 10 persistieren oder jedem Benutzer posten möchte, muss ich 10 oder Zeilen dekalieren, es sei denn, ich verwende irgendeine Art von for-Schleife.
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());
});
}
* UPDATED *
Gibt es eine Möglichkeit zu nisten die Modellfabrik eine dritte Ebene tief?
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());
}));
});
}
Modelle eine saveMany() Methode, die Sammlung Objekte akzeptiert. Versuchen Sie '$ u-> posts() -> saveMany (Fabrik (App \ Post :: class, 2) -> make());'. Beachten Sie jedoch, dass dies im Hintergrund immer noch 2 Speicherabfragen generiert, die jedoch nicht mit einer Abfrage fortgeführt werden. –
@Yasen: Die saveMany() -Methode funktioniert. Gibt es eine Möglichkeit, die Modellfabrik um eine dritte Ebene tiefer zu verschachteln? Siehe aktualisierten Beitrag, was ich meine. – adam78
Haben Sie eine Lösung gefunden, die aus mehr als zwei Ebenen besteht? –