Wie können wir mit Eloquent ORM Einfügungen von Massendatenbanken in Laravel durchführen?
Ich möchte dies in Laravel erreichen: https://stackoverflow.com/a/10615821/600516, aber ich erhalte die folgende Fehlermeldung.
SQLSTATE [HY093]: Ungültige Parameternummer: gemischte benannte und Positionsparameter.
has_many
Beziehung zu Ihren Modellen?Antworten:
Sie können einfach verwenden
Eloquent::insert()
.Beispielsweise:
quelle
Eloquent
tatsächlich nicht berührt . Es wird nur der Aufruf derQuery\Builder@insert()
Methode als Proxy ausgeführt. Es gibt keine Möglichkeit, mehrere Zeilen mit Eloquent effizient einzufügen, und es gibt auch keine Methode für Masseneinfügungen.Wir können die GTF-Antwort aktualisieren, um Zeitstempel einfach zu aktualisieren
Update: Um das Datum zu vereinfachen, können wir Kohlenstoff verwenden, wie von @Pedro Moreira vorgeschlagen
UPDATE2: Verwenden Sie für Laravel 5
updated_at
anstelle vonmodified_at
quelle
$now
Variable zu definieren :$now = Carbon::now('utc')->toDateTimeString();
. Dann einfach'created_at' => $now, 'updated_at' => $now
für jede Einfügung verwenden.Carbon
in dieser Situation? Was ist los mitdate("Y-m-d H:i:s")
?Wer dies liest, sollte die
createMany()
Methode überprüfen .quelle
Model::createMany()
. H.So machst du es auf eloquentere Weise,
quelle
Ich habe viele Male danach gesucht und schließlich benutzerdefinierte
timestamps
wie folgt verwendet:quelle
Eloquent::insert
ist die richtige Lösung, aktualisiert jedoch nicht die Zeitstempel, sodass Sie wie folgt vorgehen könnenDie Idee ist, Create_at und Updated_at zum gesamten Array hinzuzufügen, bevor Sie das Einfügen durchführen
quelle
Ab Laravel 5.7
Illuminate\Database\Query\Builder
können Sie die Methode insertUsing verwenden.quelle
UserSubscription
ist mein Modellname. Dies gibt "true" zurück, wenn das Einfügen erfolgreich ist, andernfalls "false".quelle
Ein Laravel-Weg, um dieses Problem zu lösen, besteht möglicherweise darin, eine Sammlung zu verwenden und sie in einer Schleife einzufügen, wobei das Modell die Zeitstempel nutzt.
BEARBEITEN:
Entschuldigung für mein Missverständnis. Für das Masseneinfügen könnte dies helfen, und vielleicht können Sie damit gute Sämaschinen herstellen und sie ein wenig optimieren.
quelle
Beim Einfügen von Kategoriebeziehungen stieß ich auf dasselbe Problem und hatte keine Ahnung, außer dass ich in meinem beredten Modell Self () verwendet habe, um eine Instanz derselben Klasse in foreach zu haben, um mehrere Speicherungen aufzuzeichnen und IDs abzurufen.
ohne "$ obj = new Self ()" werden nur einzelne Datensätze gespeichert (wenn $ obj $ this war)
quelle
Problem gelöst ... Tabelle für Migration ändern
Lösung:
quelle