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 使用更改时间的同一实例。
我在使用 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 使用更改时间的同一实例。