Laravel wherebetween datetime

Laravel wherebetween datetime

我在使用 wherebetween 按时间戳(日期时间)过滤数据时遇到问题

为了测试查询,这是我的路线

Route::get('/test3/{iduser}/{waktu}', 'SharedController@fgetxy_person');

这是URL测试

http://localhost:8000/test3/32/2020-12-08 2010:15:00

这是我的控制器

public function fgetxy_person($iduser, $waktu){
        $time = Carbon::createFromFormat('Y-m-d H:i:s', $waktu, 'Asia/Jakarta');
        // dd($time->addMinutes(-5)); //output: 10:10:00
        // dd($time->addMinutes(30)); //output: 10:45:00
        $xybeacon = DB::table('transaksi as tb')
        ->select('tb.id_ble', 'tb.rssi', 'tb.id_ble2', 'tb.rssi2', 'tb.id_ble3', 'tb.rssi3','tb.updated_at')
        ->where('id_user', $iduser)
        ->whereBetween('updated_at', [$time->addMinutes(-5), $time->addMinutes(30)])    //output: []
        // ->whereBetween('updated_at', array($time->addMinutes(-5), $time->addMinutes(30)))    // output: []
        // ->where('updated_at','>=',$time->addMinutes(-5))    //output: 94 array
        // ->where('updated_at','<=',$time->addMinutes(30)) //output: 35 array
        
        // ->whereRaw(
        //     "(updated_at >= ? AND updated_at <= ?)", 
        //     [$time, $time->addMinutes(30)]
        //   )  //output: []
        
        ->get();

问题是,我无法使用 wherebetween 获取数据。

如果我尝试使用 1,例如 addMinutes(-5),我可以获得数据。

但是当在 addMinutes(-5) 和 addMinutes(30) 中使用 2 时,我得到空数组 []

如有任何帮助,我们将不胜感激

默认的 carbon 实例是可变的,这意味着如果您使用相同的实例,您将始终使用相同的时间。您应该切换到不可变的 Carbon 实例。

public function fgetxy_person($iduser, $waktu){
        $time = CarbonImmutable::createFromFormat('Y-m-d H:i:s', $waktu, 'Asia/Jakarta');
        $xybeacon = DB::table('transaksi as tb')
        ->select('tb.id_ble', 'tb.rssi', 'tb.id_ble2', 'tb.rssi2', 'tb.id_ble3', 'tb.rssi3','tb.updated_at')
        ->where('id_user', $iduser)
        ->whereBetween('updated_at', [$time->addMinutes(-5), $time->addMinutes(30)])        
        ->get();

这将确保 whereBetween 中的两个参数引用不同的时间。

不同之处在于,所有更改实例时间的函数都将 return 使用该时间的新实例,而不是 return 使用更改时间的同一实例。