我想将日期更新为第二天。我该怎么办?
现在我用这个做。
$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;
感谢关注。
答案 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");
]);
}
未经测试,但可以正常工作。