代码之家  ›  专栏  ›  技术社区  ›  Davit Zeynalyan

在Laravel中将日期更新到第二天

  •  0
  • Davit Zeynalyan  · 技术社区  · 6 年前

    我想把我的日期更新到第二天的日期。我该怎么做?

    现在我用这个来做。

    $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;
    

    谢谢关注。

    4 回复  |  直到 6 年前
        1
  •  2
  •   Devon Bessemer    6 年前

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

    ORM中模型的强大功能是从数据库中获取数据,将其映射到对象中的属性,然后操作该对象。更新的单个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")]);
    
        2
  •  1
  •   prateekkathal    6 年前

    这应该管用

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

    让我知道:)

        3
  •  0
  •   Asakkour Soufiane    6 年前
    $startDate = date_timestamp_get($calendar->started_at);
    $date = date('Y-m-d H:i:s', strtotime('+1 day', $startDate));
    $calendar->update(['started_at' => $date]);
    
        4
  •  -1
  •   anwerj    6 年前

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

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

    没有测试,但应该可以工作。