2016-05-13 28 views
0

如何執行批量更新多個Comment記錄的發佈日期爲+1周期間?理想的結果的說明:使用口才大衆日期更新

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

回答

2

您可以使用DB::raw()在數據庫中執行任意代碼 - 只要記住它可能無法移植到其他數據庫引擎。

下應該做的伎倆在MySQL的和其他引擎支持DATE_ADD功能:

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

感謝的答案,但不是有辦法做到這一點通過本地使用雄辯? –

+1

如果您想用單個查詢更新多行,則不行。在構建器中有增量方法,但它通過向給定列添加整數來工作,對於包含日期時間值的列不起作用 –

2

根據該文檔,你可以這樣做:

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

根據對此:

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

Laravel文檔基本更新:加減

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

碳文檔:

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

+0

謝謝您的回答。這種方法的問題在於,您不會將+1周添加到**現有**日期,而是從現在開始僅用+1周**將其覆蓋** –

+0

對不起,我沒有注意到這一點。我的答案已更新。 –

+0

此方法效率低下,因爲它爲每個單個記錄檢索'publish_date',不必要地加載數據庫 –