我正在尝试根据
$booking_start_formatted
列从数据库中检索位于 $booking_end
和 session_start
之间的数据。但是,它只选择早于 $booking_start_formatted
的数据。
public function store(Request $request, Utils $utils)
{
$request->validate([
"user_id" => "required|int",
"booking_start" => "required",
]);
try {
$booking_start = Carbon::parse($request->get("booking_start"));
$booking_start_formatted = $booking_start->format("Y-m-d H:i:s");
$booking_end = $booking_start->addMinute(45)->format("Y-m-d H:i:s");
$booking = Bookings::query()->whereBetween("session_start", [$booking_start_formatted, $booking_end])->get();
return $utils->message("error", $booking, 400);
} catch (\Throwable $e) {
// Handle the exception
return $utils->message("error", $e->getMessage(), 400);
}
}
我使用的时间戳格式是“2024-03-31 06:35:13”。
您需要克隆
Carbon
对象或更改为不可变对象。 Carbon 默认是一个可变对象。
使用
copy
或clone
方法:
$booking_end = $booking_start->copy()->addMinute(45)->format("Y-m-d H:i:s");
$booking_end = $booking_start->clone()->addMinute(45)->format("Y-m-d H:i:s");
使用
object cloning
方法:php.net
$booking_end = (clone $booking_start)->addMinute(45)->format("Y-m-d H:i:s");
看看这个 Stack Overflow 帖子,同样的问题 https://stackoverflow.com/a/49905830/11836673