Laravel命令不保存和更新到数据库

时间:2017-09-18 02:10:46

标签: php mysql laravel

我正在编写一个游戏模拟器,并希望创建一个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));
    }

2 个答案:

答案 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));
    }