Laravel API Resource Collection возвращает указанные c поля из другого ресурса - PullRequest
0 голосов
/ 22 января 2020

Я работаю над API, который будет доступен через мобильное приложение.

Я определил ресурсы и коллекции для соответствующих конечных точек. Моя проблема сейчас в том, что я хочу вернуть различные данные API json, основанные на том, что когда-либо собирать.

Вот пример

Провинции имеют города и пригороды, поэтому в формате json мне нужно иметь

    "data": [
        {
            "id": 1,
            "name": "Eastern Cape",
            "cities": [
                {
                    "name": "Alice"
                },
            ],
            "suburbs": [
                    "name": "Suburb 1"
            ]
        },
]

Мне нужны разные данные, когда ресурс городов вызывается в коллекции API новостей

    "data": [
        {
            "id": 1,
            "name": "Eastern Cape",
            "cities": [
                {
                    "name": "Alice",
                    "municipality": "municipality name",
                },
            ],
            "suburbs": [
                    "name": "Suburb 1",
                    "ward_number": "ward 1"
            ]
        },
]

Это API NewsResource

    public function toArray($request)
    {
        // return parent::toArray($request);
        return [
            'id'=> $this->id,
            'title' => $this->title,
            'slug' => $this->slug,
            'content' => $this->content,
            'created_at' => $this->created_at,
            'category_id' => $this->news_category_id,
            'featured_image' => url($this->featured_image),
            'author' => new UserResource($this->user),
            'category' => new NewsCategoryResource($this->category), //Only category Name to be displayed
            'municipality' => new MunicipalityResource($this->municipality), // Only Municipality Name to be displayed
            'comments' => new NewsCommentResource($this->comments),
        ];
    }

1 Ответ

0 голосов
/ 23 января 2020

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

Вы можете использовать различные запросы, например

/** For the obvious resource calling */
return SomeResource::collection (SomeModel::with(['suburbs', 'cities'])
    /** Other filter queries */
    ->get());

/** For the cities resource calling */
return SomeResource::collection (SomeModel::with(['suburbs:id,ward_number', 'cities:id,municipality'])
    /** Other filter queries */
    ->get());

В вашем классе ресурсов, который вы используйте для данных городов / пригородов, сделайте это так

return [
    /** Some data which you need */
    'municipality' => $this->when($this->municipality !== null, $this->municipality),
    'ward_number' => $this->when($this->ward_number !== null, $this->ward_number),
];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...