laravel8で重い処理なんだけど、できるだけリアルタイムで取得したいので、eloquentで取得してjsonファイルで保存してデータを返す(定期的にバッチでjsonファイルを作っておく)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
public function index() { // ファイル名を決定 $filename = sprintf("prefecture%02d.json", $request->prefecture_id); // 保存済みファイル(\storage\app)があったら、そのデータを使う if(\Storage::disk('local')->exists($filename)){ // ファイル(文字列)から配列に変換 $contents = json_decode(\Storage::disk('local')->get($filename)); // なかったら、DBから作成する }else{ // なんか重い取得の処理 $contents = item::where('prefecture_id', $request->prefecture_id)->get(); // 改行・エンコード・スラッシュのエスケープは無しでJSON化して保存 $json = $items->toJson(JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); \Storage::disk('local')->put($filename, $json); } // 値を返す return $contents; } |