как я могу кэшировать объект и его отношения в laravel 6 - PullRequest
0 голосов
/ 05 мая 2020

В RatingController:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Http\Resources\RatingResource;
use App\Models\Rating\Rating;

class RatingController extends Controller
{
    public function getRatingsByCategory($id)
    {
        $ratings = cache()->rememberForever('test', function () use ($id) {
            return new RatingResource(Rating::findOrFail($id));
        });

        return response()->json([
            'data' => $ratings
        ]);
    }
}

в классе RatingResource

<?php

namespace App\Http\Resources;

use Illuminate\Http\Resources\Json\JsonResource;
use Illuminate\Http\Resources\Json\ResourceCollection;

class RatingResource extends JsonResource
{
    /**
     * Transform the resource collection into an array.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return array
     */
    public function toArray($request)
    {
        return [
            'id' => $this->rating_id,
            'is_active' => $this->is_active,
            'created_at' => '2020',
        ];
    }
}

когда я отправляю запрос этому контроллеру, я получаю этот результат

{
    "data": {
        "id": 3,
        "is_active": 1,
        "created_at": "2020"
    }
}

но когда Я меняю каждый столбец в RatingResource, например created_at, результат меняется. действительно, laravel не кэширует окончательный результат, он кеширует объект моего запроса, и когда я возвращаю этот объект, он начинает преобразовывать мой объект в формат ресурса. как я могу кэшировать результат ApiResource, пока я не удалю этот ключ кеша.

1 Ответ

0 голосов
/ 05 мая 2020

Вы можете кэшировать весь ответ, в этом случае вам нужно будет добавить идентификатор к ключу кеша, чтобы различать разные идентификаторы рейтинга.

Примерно так: *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...