更新日期到laravel的第二天

时间:2018-06-21 14:52:05

标签: php laravel eloquent php-carbon

我想将日期更新为第二天。我该怎么办?

现在我用这个做。

$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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

这应该有效

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

让我知道:)

答案 2 :(得分:0)

#include <iostream>

int main()
{
    auto a = std::make_tuple(
        std::integral_constant<int,1> {},
        std::integral_constant<int,3> {},
        std::integral_constant<int,4> {},
        std::integral_constant<int,5> {}
    );

    using b_type = filter<four_or_more, decltype(a)>::type;

    std::cout << "size : " << std::tuple_size<b_type>() << std::endl;
    std::cout << std::tuple_element_t<0, b_type>::value << std::endl;
    std::cout << std::tuple_element_t<1, b_type>::value << std::endl;
}

答案 3 :(得分:-1)

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

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

未经测试,但可以正常工作。