这是我的 ReservationController 内的函数:
public function realtime() {
// Change to On Going
$ongoing = Reservation::select('*')
-> where('eventStatus', 'NYD') -> get();
//dd($ongoing);
foreach ($ongoing as $og) {
echo "Started For Each\n";
//dd($og);
if ($og -> reservationStart > Carbon::now() &&
$og -> reservationEnd < Carbon::now()) {
$og -> eventStatus = "On Going";
$og -> save();
echo "Updated to ongoing!";
}
else {
// echo $og -> reservationSTart;
}
}
// Change to Done
}
该函数由任务调度程序触发。任务调度器运行命令php.exe {path/to/my}/artisan Schedule:run
,当然,php.exe被添加到系统变量PATH中。任务是每分钟触发一次命令。在我的内核中,我在调度函数中添加了以下代码:
if (strtolower(env('SYS_REALTIME')) == "yes") {
$schedule->call('App\Http\Controllers\ReservationController@realtime') -> everyMinute();
}
现在,每次我触发该命令(无论是通过手动计划运行还是通过任务计划程序触发),我总是收到错误:
Running scheduled command:
App\Http\Controllers\ReservationController@realtime
Started For Each
[InvalidArgumentException]
Unexpected data found.
Unexpected data found.
Data missing
我希望系统从查询结果中获取时间,然后将其与当前时间进行比较。如果它位于开始时间和结束时间之间,我想将 eventStatus
值切换为 On Going
。以下是数据库中的字段列表:
primeID - INT AI
reservationName - VARCHAR(30)
dateReserved - date
reservationStart - time
reservationEnd - time
这是我迄今为止尝试过的:
- 我尝试使用
dd()
来显示$ongoing
的值。它成功显示了有关变量的所有内容(包括日期和时间)的转储。 - 我尝试使用
dd()
来显示$og
的值。它成功显示了传递的变量的转储,包括日期和时间。 - 我尝试使用
dd()
来显示$og ->reservationStart
的值。发现意外的数据(就像我上面所说的错误)。也在reservationEnd
中尝试过。尽管如此,它还是会抛出错误。 - 我尝试使用
dd()
显示$og -> dateReserved
的值。它正确显示日期转储。 - 我尝试删除变量和成员之间的空格。我仍然遇到错误。同样的错误。
- 我尝试删除
foreach
block 内的所有代码(echo "Started For Each\n";
除外)。循环成功运行。 - 我尝试删除 Laravel 查询中的
get()
。它没有进入循环。 - 我尝试删除 Laravel 查询中的
select('*')
。出现同样的错误。 - 我尝试注释 if 语句并使用
dd()
显示$og ->reservationStart
。它抛出同样的错误。再次尝试使用reservationEnd
,抛出相同的错误。
我的代码有什么问题吗?
最佳答案
我已经找到答案了。在MySQL中,存储时间时日期会被修剪。我只是将数据类型更改为datetime
,一切正常。
关于php - 比较 Laravel Eloquent Result 并获取日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46746939/