Сохраните результаты запроса и сохраните их в формате файла JSON, а затем верните их - Laravel / Vue - PullRequest
0 голосов
/ 16 мая 2019

Я делаю API в Laravel, чтобы общаться с Vue на внешнем интерфейсе.

Во-первых, я не хочу делать запрос к базе данных каждый раз, когда страница загружается.

Решение : Сделайте первый запрос к базе данных, сохраните его в файл json, а затем верните его, следующий запрос отправит только файл json без запроса базы данных. Я буду восстановлен через 1 день.

Проблема : Все работает, но ответ не в допустимом формате JSON. Так что Vue не может создать файл json и отобразить страницу

Код:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use App\Product;
use Storage;

class ProductController extends Controller
{
    public function home () 
    {
        $file = 'json\products.json';
        $fileExists = Storage::disk('local')->exists( $file );
        $storagePath  = Storage::disk('local')->path( $file );

        if ( $fileExists ) {
            if ( time () - 86400 < filemtime ($storagePath ) ) {
                return Storage::get($file);
            }
        }

        $products = Product::select( 'id' , 'name' , 'code' , 'description' , 'size' , 'weight' , 'pic_url' 'pic_video' 'long_description' )->limit(200)->get();

        //Storage::disk('local')->put('json\products.json', json_encode($products, JSON_PRETTY_PRINT) ); //Doesnot Work 
        Storage::disk('local')->put('json\products.json', response()->json(['products' => $products ])); // Doesnot Work

        return response()->json(['products' => $products ] , 200); // This response works , and vue catches and reads perfectly
    }
}

отредактировано: return Storage :: get ($ file);

Пример в браузере:

1 Ответ

0 голосов
/ 16 мая 2019

Решено так:

return cache()->remember($cacheKey, 1440 , function () {
    $products = Product::select( 'id' , 'name' , 'code' , 'description' , 'size' , 'weight' , 'pic_url' 'pic_video' 'long_description' )->limit(200)->get();
    return ['products' => $products];
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...