En vrac Insertion dans Laravel à l'aide éloquent ORM
Comment peut-on effectuer en vrac de la base de données des insertions dans Laravel à l'aide Éloquent ORM?
Je veux le faire dans Laravel: https://stackoverflow.com/a/10615821/600516
mais j'obtiens l'erreur suivante.
SQLSTATE[HY093]: Invalid parameter number: mixte nommé et paramètres positionnels.
- Avez-vous un
has_many
relation sur vos modèles? - non je n'ai pas de relations le moment
- j'ai essayé de former la quesr chaîne à l'aide d'une boucle for. J'ai également essayé d'utiliser les transactions dans laravel.
- Pourriez-vous poster votre code? Je suis sûr que j'ai un code ici qui pourront vous aider.
- Avez-vous vu laravel.com/docs/database/eloquent#mass-assignment?
- J'ai essayé cette approche stackoverflow.com/questions/10615762/php-bulk-insert-foreach et utilisé instance de pdo pour préparer et exécuter les satement. Je suis en cours d'exécution dans SQLSTATE[HY093]: Invalid parameter number: mixte nommé et les paramètres positionnels
- la mesure de masse est automatiquement affectation des entrées à un seul modèle de champs, il n'est pas sur la création de plusieurs modèles à la fois.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement utiliser
Eloquent::insert()
.Par exemple:
Eloquent
en fait. Il vient de procurations de l'appel àQuery\Builder@insert()
méthode. Il n'y a pas moyen d'insérer efficacement plusieurs lignes avec des Éloquent, et n'offre pas de méthode pour des insertions.Model::insert(array($model1->toArray(), ...))
, que->toArray()
ne sera pas présent vous avec un plat éventail de caractéristiques, si votre modèle a des relations ou des moulages. Vous pourriez regarder dans->getArrayableAttributes()
, mais vous n'obtenez pas les fuseaux horaires... bref; il n'y a pas de bonne façon de le faire.created_at
etupdated_at
j'ai essayé et vérifié.Nous pouvons mettre à jour FTE la réponse à la mise à jour des horodateurs facilement
Mise à jour:
pour simplifier le jour, nous pouvons utiliser le carbone comme @Pedro Moreira suggéré
UPDATE2: pour laravel 5 , l'utilisation
updated_at
au lieu demodified_at
$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")
?À celui qui lit ceci, découvrez
createMany()
méthode.C'est comment vous le faites dans le plus Éloquent,
J'ai cherché de nombreuses fois pour elle, enfin personnalisée
timestamps
comme ci-dessous:Eloquent::insert
est la bonne solution, mais il l'habitude de mettre à jour l'horodatage, de sorte que vous pouvez faire quelque chose comme ci-dessousL'idée est d'ajouter created_at et updated_at sur l'ensemble de la baie avant de faire insérer
Pour la catégorie relations d'insertion, je suis tombé sur le même problème et n'avait aucune idée, sauf que dans mon éloquent le modèle que j'ai utilisé l'Auto() pour avoir une instance de la même classe dans une boucle foreach pour enregistrer des sauvegardes multiples et grabing id.
sans "$obj = new Self ()", il enregistre seulement seul enregistrement (lorsque obj $a $cette)
UserSubscription
est mon nom de modèle.Cela renvoie "vrai" si l'insérer avec succès d'autre "faux".
Peut-être un plus Laravel façon de résoudre ce problème est l'utilisation d'une collection et d'une boucle d'insertion avec le modèle en prenant avantage de l'horodatage.
EDIT:
Désolé pour mon incompréhension. En vrac, l'insertion de ce qui pourrait les aider et peut-être avec ce que vous pouvez faire bon de semoirs et de les optimiser un peu.
RÉSOLU LE PROBLÈME ............. ALTER TABLE POUR MIGRER...
FACILE