首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >保存查询结果并将其存储为JSON文件格式,然后返回- Laravel / Vue

保存查询结果并将其存储为JSON文件格式,然后返回- Laravel / Vue
EN

Stack Overflow用户
提问于 2019-05-17 00:15:23
回答 1查看 1.1K关注 0票数 1

我正在用Laravel制作一个api,以便在前端与Vue进行通信。

首先,我不想在每次加载页面时都向数据库发出请求。

Solution:第一次向数据库发出请求,保存到json文件后返回,下一次请求只发送json文件,不发送数据库请求。我将在1天后重新生成。

Problem:一切正常,但响应不是有效的json格式。因此,Vue不能缓存json文件并呈现页面

代码:

代码语言:javascript
复制
<?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);

Example in browser:

EN

回答 1

Stack Overflow用户

发布于 2019-05-17 03:15:43

解决方法如下:

代码语言:javascript
复制
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];
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56172744

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档