Comment pouvons-nous effectuer des insertions de bases de données en masse dans Laravel en utilisant Eloquent ORM?
Je veux accomplir cela dans Laravel: https://stackoverflow.com/a/10615821/600516 mais j'obtiens l'erreur suivante.
SQLSTATE [HY093]: Numéro de paramètre non valide: paramètres nommés et positionnels mixtes.
has_many
relation sur vos modèles?Réponses:
Vous pouvez simplement utiliser
Eloquent::insert()
.Par exemple:
la source
Eloquent
en fait pas. Il renvoie simplement l'appel à laQuery\Builder@insert()
méthode. Il n'y a aucun moyen d'insérer efficacement plusieurs lignes avec Eloquent, et il n'offre aucune méthode pour les insertions en masse.Nous pouvons mettre à jour la réponse GTF pour mettre à jour facilement les horodatages
Mise à jour: pour simplifier la date à laquelle nous pouvons utiliser le carbone comme @Pedro Moreira l'a suggéré
UPDATE2: pour laravel 5, utilisez à la
updated_at
place demodified_at
la source
$now
variable:$now = Carbon::now('utc')->toDateTimeString();
. Ensuite, utilisez simplement'created_at' => $now, 'updated_at' => $now
pour chaque insertion.Carbon
dans cette situation? Quel est le problème avecdate("Y-m-d H:i:s")
?À quiconque lit ceci, consultez la
createMany()
méthode .la source
Model::createMany()
.Voici comment vous le faites de manière plus éloquente,
la source
Je l'ai cherché plusieurs fois, j'ai finalement utilisé la coutume
timestamps
comme ci-dessous:la source
Eloquent::insert
est la bonne solution mais elle ne mettra pas à jour les horodatages, vous pouvez donc faire quelque chose comme ci-dessousL'idée est d'ajouter created_at et updated_at sur tout le tableau avant de faire l'insertion
la source
Depuis Laravel 5.7 avec,
Illuminate\Database\Query\Builder
vous pouvez utiliser la méthode insertUsing.la source
UserSubscription
est le nom de mon modèle. Cela renverra "true" si l'insertion réussit sinon "false".la source
Peut-être qu'une manière plus Laravel de résoudre ce problème est d'utiliser une collection et de l'insérer en boucle avec le modèle en tirant parti des horodatages.
ÉDITER:
Désolé pour mon incompréhension. Pour l'insertion en vrac, cela pourrait aider et peut-être qu'avec cela, vous pouvez faire de bons semoirs et les optimiser un peu.
la source
Pour l'insertion des relations de catégorie, je suis tombé sur le même problème et je n'avais aucune idée, sauf que dans mon modèle éloquent, j'ai utilisé Self () pour avoir une instance de la même classe dans foreach pour enregistrer plusieurs sauvegardes et identifiants de classement.
sans "$ obj = new Self ()" il ne sauvegarde qu'un seul enregistrement (quand $ obj était $ this)
la source
Problème résolu ... Modifier la table pour migrer
Solution:
la source