🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

Q&A

解決済

1回答

1327閲覧

Laravelのタスクスケジュールで設定した処理が実行されない

Tikka123456

総合スコア34

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

0グッド

0クリップ

投稿2021/03/16 04:51

編集2021/03/16 09:24

ボタンをクリックするとクイズが表示されるページに遷移して、毎日指定された時間に更新されてランダムに別のクイズに変わるサイトを作っています。同じ時間ならだれでも同じクイズを表示できるようにしたいです。
今の段階ではQuizController側の処理だけが動いていて、スケジュールの処理が何もしていない状態です。
タスクスケジュールでの処理をコントローラーに渡して実行する必要があるのでしょうか?
またはルーティングが間違っているのでしょうか
どうかよろしくお願いします。

Kernel.php

<?php namespace App\Console; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; use App\Quiz; use Illuminate\Support\Facades\Log; class Kernel extends ConsoleKernel { /** * The Artisan commands provided by your application. * * @var array */ protected $commands = [ ]; /** * Define the application's command schedule. * * @param \Illuminate\Console\Scheduling\Schedule $schedule * @return void */ protected function schedule(Schedule $schedule) { $schedule->call(function() { $quiz = Quiz::with('answer') ->inRandomOrder() ->get(); return $quiz; }) ->everyMinute() ->onSuccess(function () { Log::info('成功'); }); } /** * Register the commands for the application. * * @return void */ protected function commands() { $this->load(__DIR__.'/Commands'); require base_path('routes/console.php'); } }

QuizController.php(こちらの処理が実行されてしまう)

<?php namespace App\Http\Controllers\Api; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\Quiz; class QuizController extends Controller { public function show() { $quiz = Quiz::with('answer') ->inRandomOrder() ->get(); return $quiz; } }

Web.php

Route::get('/quiz', function() { return view('quiz.show'); });

API.php

Route::group(['middleware' => ['api']], function () { Route::get('information', 'Api\InformationController@index'); Route::get('quiz', 'Api\QuizController@show'); });

追記
cron

* * * * * cd /user/~ && php artisan schedule:run >> /dev/null 2>&1

php artisan schedule:runの結果

Warning: Unexpected character in input: ' (ASCII=8) state=0 in /Users/~/app/Console/Kernel.php on line 38 Running scheduled command: Callback

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lulucom

2021/03/16 05:26 編集

> クイズがランダムに更新される これはどういうことを意味していますか?やりたいことをもう少し具体的に例示していただくと良い回答がつくのではないかという気がしています。おそらくタスクスケジュール機能を使うことが間違っている気がしています・・・
AbeTakashi

2021/03/16 08:22

Lulucomさんと同意見で質問の意味が分かりにくいのですが、そもそもLaravelでのタスクスケジュールの実行はcronの設定が必要かと思いますが、その記述が見当たりません。そちらの設定もしているなら記載した方が良いと思います。逆にルーティングとかは質問の件とはあまり関係ない気がします。
Tikka123456

2021/03/16 08:40

返信ありがとうございます。 すいません。色々と説明不足でした。 ボタンをクリックするとクイズが表示されるページに遷移して、毎日指定された時間に更新されてランダムに別のクイズに変わるってことです。 cronの設定とphp artisan schedule:runを実行した際の結果を追記しました。
Lulucom

2021/03/16 08:54

ご説明ありがとうございます、同じ時間帯なら誰が見ても同じクイズを表示する、という認識であっていますか? こちらへの返信ではなく、質問を編集するかたちで、仕様を説明していただくと良いでしょう。
Tikka123456

2021/03/16 09:27

はい、その通りです。
Lulucom

2021/03/16 09:35 編集

stack overflowでよくみたらkawaxさんが回答してくださってましたね。 タスクスケジュールされたコマンドではあのように保存を行い、コントローラではキャッシュから取り出すようにする、ということだと思います。
Tikka123456

2021/03/16 23:51

以前のスタックオーバーフローの回答をLulucomさんの通りに直したら無事動きました。ありがとうございます。
Lulucom

2021/03/17 00:43 編集

stackoverflowでのkawaxさんの回答で解決されたということでしょうか?よかったですね^ ^ こちらのteratailでの質問はご自身で回答を書いて閉じていただくと良いと思います。
guest

回答1

0

自己解決

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

$quiz = cache('quiz');
このようにキャッシュで保存して、使う処理をコントローラーに書くことで実装できました。

投稿2021/03/20 00:10

Tikka123456

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問