2016-05-13 12 views
0

Wie führen Sie eine Bulk-Update von mehreren Comment Datensätze 'veröffentlichen Daten mit +1 Woche Zeitraum? Die Abbildung des gewünschten Ergebnisses:Mass date update mit beredten

$interval = CarbonInterval::week(); // 1 week interval, that needs to fit into below query 
Comment::where('id', '>', 10)->update('publish_date', ...); 

Antwort

2

können Sie DB::raw() verwenden, um beliebigen Code in der Datenbank ausführen - nur im Kopf behalten, dass es nicht auf andere DB-Motoren tragbar sein könnte.

Die folgende Beschreibung ist der Trick in MySQL und anderen Motoren zu tun, die DATE_ADD Funktion unterstützen:

Comment::where('id', '>', 10)->update(['publish_date' => DB::raw('DATE_ADD("publish_date", INTERVAL 1 WEEK)')]); 
+0

Danke für eine Antwort, ist aber nicht, dass es eine Möglichkeit, dies zu tun eloquent nativ verwenden? –

+1

Nicht, wenn Sie mehrere Zeilen mit einer einzigen Abfrage aktualisieren möchten. Es gibt die increment-Methode im Builder, aber es funktioniert, indem eine ganze Zahl zu einer gegebenen Spalte hinzugefügt wird, die nicht für Spalten funktioniert, die einen datetime-Wert enthalten –

2

Nach der Dokumentation können Sie dies tun:

App\Models\Comment::where('id', '>', 10)->update([ 'publish_date' => Carbon\Carbon::parse(DB::raw("`publish_date`"))->addWeeks(1) ]);

Nach zu diesem:

https://laracasts.com/discuss/channels/eloquent/mass-updating-table-to-set-value-of-column-to-value-of-another-column

Laravel Dokumentation für Grund Updates:

https://laravel.com/docs/5.2/eloquent#basic-updates

Carbon-Dokumentation für die Addition und Subtraktion:

http://carbon.nesbot.com/docs/#api-addsub

+0

Vielen Dank für eine Antwort. Das Problem mit diesem Ansatz ist, dass Sie dem ** vorhandenen ** Datum keine +1 Woche hinzufügen, sondern es einfach mit +1 Woche ** von jetzt überschreiben ** –

+0

Entschuldigung, das habe ich nicht beachtet. Meine Antwort wurde aktualisiert. –

+0

Dieser Ansatz ist ineffizient, da er 'publish_date' für jeden einzelnen Datensatz abruft, wodurch die Datenbank unnötig geladen wird –