将日期更新到 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();

但是这个解决方案对我不利,因为数据库 中有 2 个请求。我不会只使用一个请求来做到这一点。

有没有办法将日期动态更新为第二天的日期?

例如

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

我也发现 sql 等价物

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

感谢关注。

您可以在日历模型中编写自己的方法,例如,

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

未测试,但应该可以。

这应该有效

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]);

Calendar::where('id', $id)->update() 只是语法糖。这会将您代理到查询生成器并且与 运行ning DB::table('calendar')->where('id', $id)->update();

相同

ORM 中模型的强大之处在于从数据库中获取数据,将其映射到对象中的属性,然后操作该对象。单个 select 更新的开销非常小,如果您担心开发阶段的开销,您可能优化过度了。

如果您希望放弃 select,您可以使用带有原始 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")]);