这是我的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
之外的echo "Started For Each\n";
块内的所有代码。循环成功运行。get()
。它没有进入循环。select('*')
。出现相同的错误。dd()
来显示$og -> reservationStart
。它会抛出同样的错误。再次尝试reservationEnd
会抛出相同的错误。我的代码出了什么问题?
答案 0 :(得分:0)
我已经找到了答案。在MySQL中,日期在存储时间时被修剪。我只是将数据类型更改为datetime
,一切正常。