Laravel 的 whereBetween 方法不适用于两个时间戳

问题描述 投票:0回答:1

我正在尝试根据

$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”。

php laravel timestamp php-carbon
1个回答
0
投票

您需要克隆

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

© www.soinside.com 2019 - 2024. All rights reserved.