簡體   English   中英

更新日期到laravel的第二天

[英]update date to next day in laravel

我想將日期更新為第二天。 我該怎么做?

現在,我用它來做。

$calendar = Calendar::find($id);
$calendar->update(['started_at' => $calendar->started_at->addDay(1)));

或者我可以做到

$calendar->started_at->addDay(1);
$calendar->save();

但是這個解決方案對我來說是不好的,因為數據庫中兩個請求 我不會只使用一個請求。

有沒有辦法將日期動態更新為第二天?

例如

Calendar::where('id', $id)->updateToNextDay('started_at');

我也發現等效的SQL

UPDATE `calendar` SET `started_at` = `started_at` - INTERVAL 1 DAY;

感謝您的關注。

Calendar::where('id', $id)->update()只是語法糖。 這將代理您到查詢生成器,並且與運行DB::table('calendar')->where('id', $id)->update();

ORM中模型的功能是從數據庫中獲取數據,將其映射到對象中的屬性,然后操作該對象。 一次選擇一次更新的開銷很小,如果您在開發階段擔心這種開銷,則可能是過度優化了。

如果您希望放棄選擇,則可以使用帶有原始SQL表達式的查詢生成器。 要么調用查詢生成器並運行相同的查詢:

Calendar::where('id', $id)
    ->update(['started_at' => DB::raw("started_at + INTERVAL 1 DAY")]);

要么

DB::table('calendars')->where('id', $id)
    ->update(['started_at' => DB::raw("started_at + INTERVAL 1 DAY")]);

這應該工作

Calendar::where('id', $id)->update([
  'started_at' => DB::raw("DATE_ADD(started_at, INTERVAL 1 DAY)")
]);

讓我知道 :)

$startDate = date_timestamp_get($calendar->started_at);
$date = date('Y-m-d H:i:s', strtotime('+1 day', $startDate));
$calendar->update(['started_at' => $date]);

您可以在日歷模型中編寫自己的方法,例如,

public function updateToNextDay(string $column)
{
    $this->update([
        $column => \Db::raw("$column + INTERVAL DAY 1");
    ]);
}

未經測試,但應該可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM