

Laravelでタスクスケジュール機能を利用してクイズがランダムに更新されるという処理を作ったのですが、タスクスケジュールが正常に動いているはずなのに全く変化がありません。TimeQuiz.phpのhandle()の記述がおかしいのでしょうか？  
同じプログラムをController.phpに書いた場合普通に動きます。

php artisan schedule:runを実行した結果

[code]

    Running scheduled command: '/usr/bin/php' 'artisan' command:quiz > '/dev/null' 2>&1
    
[/code]

TimeQuiz.php

[code]

    <?php
    
    namespace App\Console\Commands;
    
    use Illuminate\Console\Command;
    use App\Quiz;
    
    class TimeQuiz extends Command
    {
        /**
         * The name and signature of the console command.
         *
         * @var string
         */
        protected $signature = 'command:quiz';
    
        /**
         * The console command description.
         *
         * @var string
         */
        protected $description = 'TimeQuiz';
    
        /**
         * Create a new command instance.
         *
         * @return void
         */
        public function __construct()
        {
            parent::__construct();
        }
    
        /**
         * Execute the console command.
         *
         * @return mixed
         */
        public function handle()
        {
            $quiz = Quiz::with('answer')
                ->inRandomOrder()
                ->get();
    
                return $quiz;
        }
    }
    
[/code]

Kernel.php

[code]

    <?php
    
    namespace App\Console;
    
    use Illuminate\Console\Scheduling\Schedule;
    use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
    use Illuminate\Support\Facades\Log;
    
    class Kernel extends ConsoleKernel
    {
        /**
         * The Artisan commands provided by your application.
         *
         * @var array
         */
        protected $commands = [
            'App\Console\Commands\TimeQuiz'
        ];
    
        /**
         * Define the application's command schedule.
         *
         * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
         * @return void
         */
        protected function schedule(Schedule $schedule)
        {
            $schedule->command('command:quiz')
            ->everyMinute()
            ->onSuccess(function () {
                Log::info('成功');
            });
        }
    
[/code]


CC BY-SA 4.0
2021-03-11T08:33:14.323
74586
2021-03-11T12:10:43.347
2021-03-11T08:50:11.613
19110
39431
question
laravel
Laravelでタスクスケジュール機能が正常に動いているはずなのに機能しない。


今のhandle()では何もしてないのと同じ。

コマンド＋スケジュールの便利な使い方はキャッシュに永久に保存。

[code]

    $quiz = Quiz::with('answer')
                ->inRandomOrder()
                ->get();
    
    cache()->forever('quiz', $quiz);
    
[/code]

保存しておいて使う場所で取り出す。

[code]

    $quiz = cache('quiz');
    
[/code]

裏側で保存（スケジュールで定期的に更新）、使う時はキャッシュから取り出すだけなので速い。  
これがメリットなのでこの質問の場合はそもそもコマンドで実行してる意味がない。  
ランダムならユーザーのアクセスごとに取得したほうがいいのでキャッシュの出番はない。


CC BY-SA 4.0
2021-03-11T12:10:43.347
74592
2021-03-11T12:10:43.347
21074
74586
answer