Laravel 4 - Insérer plusieurs enregistrements lors de l'utilisation de la relation hasMany
Toujours à trouver mes pieds avec Laravel 4 et je suis un peu trop savoir pourquoi cela ne fonctionne pas.
En L3, j'ai pu insérer plusieurs enregistrements à une table comme si...
$comments = array(
array('message' => 'A new comment.'),
array('message' => 'A second comment.'),
);
$post = Post::find(1);
$post->comments()->save($comments);
Cependant lorsque j'essaie de faire la même aujourd'hui, les enregistrements sont insérés sans la clé étrangère, comme si...
$comments = array(
array('message' => 'A new comment.'),
array('message' => 'A second comment.'),
);
$post = Post::first();
$post->comments()->insert($comments);
Ou (et après quelques recherches sur Google) j'ai essayé par la suite et obtenir une preg_match() expects parameter 2 to be string, array given
$comments = new Comment(array(
array('message' => 'A new comment.'),
array('message' => 'A second comment.'),
));
$post = Post::first();
$post->comments()->save($comments);
Ainsi que ...->save($comments)
j'ai essayé ...->saveMany()
et ...->associate()
mais j'ai le même problème que le dernier exemple.
Sur une note de côté, je fais réaliser que j'ai enveloppé le tableau multidimensionnel dans un objet, mais qui semble être la bonne façon de le faire. J'ai essayé de ne pas faire, mais qui échoue également.
Dois-je préciser que je suis une graine de commande grâce à l'artisan.
Edit:
C'est la pleine preg_match
erreur dans le fichier journal
[2013-11-27 16:43:39] log.ERROR: exception 'ErrorException' with message 'preg_match() expects parameter 2 to be string, array given' in /Applications/MAMP/htdocs/project/www/bootstrap/compiled.php:6315
Vous devez vous connecter pour publier un commentaire.
save()
s'attend à un modèle unique,saveMany()
attend un tableau de modèles, et pas assoicative tableau de données.Mais
saveMany()
ne sera pas insérer avec une seule requête, il sera en fait la boucle à travers les modèles et de les insérer une à une (remarque: L3 également fait).Si vous avez besoin d'insérer un plus grand ensemble d'enregistrements de ne pas utiliser l'ORM, utilisez le générateur de requêtes, comment Manuel Pedrera a écrit le premier exemple de code.
Juste pour le record ici est comment vous pouvez l'utiliser
saveMany()
:new Comment
, insérez ne touche pas le parent.UPDATE comments SET post_id = 10 WHERE id IN (3,6,23,56)
? Semble très banal...Cela peut ne pas être exactement ce que vous cherchez, car il ne l'utilise pas Éloquent, mais il devrait obtenir vos graines de fait. Vous pouvez utiliser
DB::insert()
, comme ceci:Comme alternative, vous pouvez faire cela en utilisant Éloquent trop, mais cela doit être fait dans l'autre sens: paramètre du modèle associé à la "childs". C'est ce que les docs officielles dire:
Je pense que c'est fait de cette façon parce que dans la base de données, "l'enfant modèle" est celui qui contient la clé étrangère à la "mère" (dans ce cas,
post_id
).Le code devrait ressembler à ceci: