我正在编写一个游戏模拟器,并希望创建一个cron作业来每天运行游戏。我正在使用Laravel的命令和调度程序来执行此操作。
任务很简单。我只想从数据库中提取记录,并在每次命令运行时更新它。但是我注意到这些更改有时不会保存到数据库中。我已经尝试过去4天的调试,但它似乎非常随机,我没有看到任何模式。我在更新之前和之后打印记录,它显示它已更新。但是当我检查我的数据库时,有时它没有显示任何变化。好像有时候更改在更新后会随机恢复。但我没有收到任何错误消息。除了TeamRecord记录之外,我还尝试更新其他对象并具有相同的随机还原问题。有什么我想念的吗?下面是我的Laravel命令的代码。我使用php artisan games:运行来运行它。
namespace App\Console\Commands;
use Illuminate\Console\Command;
use DB;
use App\Game;
use App\MainLine;
use App\GameLog;
use App\TeamRecord;
class RunGames extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'games:run';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
// Get the record from the database
$record1 = $g->homeTeam()->teamRecords->sortByDesc('season_number')->first();
// This shows the current data
$this->info($record1);
// Update the record to the database
TeamRecord::where('id', $record1->id)->update(['games_played' => $record1->games_played + 1]);
// This always shows the data has changed. But when I check the database, sometimes the record did not change.
$this->info(TeamRecord::find($record1->id));
}
答案 0 :(得分:0)
cron用户可能没有storage/logs/laravel.log
的写入权限以及可能需要写入的任何其他内容。
添加
\Log::error('This definitely should have run!');
到handle()
的第一行,看看它是否具有写访问权限。您也可以使用它来进一步调试它。
答案 1 :(得分:0)
我发现你没有将$g
传递给函数(或构造函数)。命令不一定会抛出错误。
public function handle()
{
// Get the record from the database
$record1 = $g->homeTeam()->teamRecords->sortByDesc('season_number')->first();
// This shows the current data
$this->info($record1);
// Update the record to the database
TeamRecord::where('id', $record1->id)->update(['games_played' => $record1->games_played + 1]);
// This always shows the data has changed. But when I check the database, sometimes the record did not change.
$this->info(TeamRecord::find($record1->id));
}