Оставьте некоторые детали ресурса в laravel на основе того, что передано из запроса - PullRequest
0 голосов
/ 09 июня 2019

Ресурс Laravel Api:

Ну, в принципе, у меня есть ресурс, который привязан к модели, но этот ресурс, который при получении, я также получаю ресурс соответствующей модели, например,

use Illuminate\Http\Resources\Json\Resource;

class ExampleResource extends Resource
{

    public function toArray($request)
    {
        return [
            "id" => $this->id,
            "user" => new UserResource($this->user),
            "total" => number_format($this->getTotal(), 2),
            "details" => ExampleDetailsResource::collection($this->details),
        ];
    }
}

Итак, мой вопрос:

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

Но когда я беру пример, мне нужны эти детали.

Так есть ли способ сообщить ресурсу, что мне не нужны эти данные, когда я извлекаю детали.

Причина, по которой мне нужно это сделать, заключается в том, что пример может содержать много деталей, и поэтому всякий раз, когда я получаю все примеры, это означает, что я также получаю и их детали, что замедляет мою выборку.

1 Ответ

1 голос
/ 09 июня 2019

вы можете создать ExampleDetailResource и ExampleResource, когда вы не хотите более детально вызывать ExampleResouce и наоборот.как это

для уменьшения детализации в ответе,

use Illuminate\Http\Resources\Json\Resource;

class ExampleResource extends Resource
{

    public function toArray($request)
    {
        return [
            "id" => $this->id,
            "user" => new UserResource($this->user),
            "total" => number_format($this->getTotal(), 2),
        ];
    }
}

для получения более подробного ответа,

use Illuminate\Http\Resources\Json\Resource;

class ExampleDetailResource extends Resource
{

    public function toArray($request)
    {
        return [
            "id" => $this->id,
            "user" => new UserResource($this->user),
            "total" => number_format($this->getTotal(), 2),
            "details" => ExampleDetailsResource::collection($this->details),
        ];
    }
}

в вашем методе индекса внутри контроллера,

return response()->json(new ExampleResource($data),200);

в вашем методе show внутри контроллера

return response()->json(new ExampleDetailResource($data),200);

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