2017-10-14 74 views
0

越来越日期这是我ReservationController里面的功能:比较和Laravel雄辩结果

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\[email protected]') -> everyMinute(); 
} 

现在,每次我开的命令(如果不管它是通过人工调度运行,或者通过任务调度解雇),我总是得到一个错误:

Running scheduled command: 
App\Http\Controllers\[email protected] 
Started For Each 


[InvalidArgumentException] 
Unexpected data found. 
Unexpected data found. 
Data missing 

我希望系统从查询结果中获得时间,然后将其与当前时间进行比较。如果它在开始和结束时间之间,我想将eventStatus值切换到On Going。下面是在数据库中的字段列表:

  • 我试着用dd()显示的$ongoing值:

    primeID - INT AI 
    reservationName - VARCHAR(30) 
    dateReserved - date 
    reservationStart - time 
    reservationEnd - time 
    

    因此,这里是我到目前为止已经试过。它成功显示有关变量(包括日期和时间)的所有内容。

  • 我试过用dd()来显示$og的值。它成功显示传递的变量的转储,包括日期和时间。
  • 我试过用dd()来显示$og -> reservationStart的值。发现意外的数据(就像我上面所述的错误)。也试过在reservationEnd。不过,它会抛出一个错误。
  • 我试着用dd()来显示$og -> dateReserved的值。它会正确显示日期的转储。
  • 我试着删除变量和成员之间的空格。我仍然有一个错误。同样的错误。
  • 我试着删除foreach区块内的所有代码,但echo "Started For Each\n";除外。循环成功运行。
  • 我试着在我的Laravel查询中删除get()。它没有进入循环。
  • 我试着在我的Laravel查询中删除select('*')。出现相同的错误。
  • 我尝试评论if语句,并使用dd()来显示$og -> reservationStart。它引发同样的错误。试着与reservationEnd,再次抛出相同的错误。

我的代码有什么问题?

回答

0

我已经找到答案了。在MySQL中,日期在存储时间时被修剪。我只是将数据类型更改为datetime,一切正常。