Мой предпочтительный подход состоит в том, чтобы "сгладить" отношения и тянуть их по мере необходимости. Это также позволяет вам извлекать только то, что вам нужно, с сервера или связанных модулей.
теги модуля vuex:
all: {
1: { <-- indexed by tag id
name: "weddings"
images: [1,2,3,4] <-- image ids
}
}
active: false <-- When there is an active tag, this becomes the id of the tag.
Модуль изображений vuex будет следовать той же схеме:
all: {
1: { <-- indexed by image id
title: 'Lorem..',
path: '..',
show_home: true
tags: [1,2,3,4] <-- tag ids
}
}
active: false <-- When there is an active image, this becomes the id of the image.
Затем используйте метод получения для гидратации изображений или тегов из соответствующий модуль vuex.
В этом блоге есть отличная статья об этом подходе: https://medium.com/js-dojo/structuring-vuex-modules-for-relationships-speed-and-durability-de25f7403643
При таком подходе у вас будет меньше и меньше вызовов API, нумерация страниц будет управляемой и вам не нужно беспокоиться об устаревших данных в ваших отношениях.
РЕДАКТИРОВАНИЕ - Информация API:
На ум приходят два подхода. 1) всегда загружайте изображения с тегом.
Запрос индекса тега не будет загружать никакие изображения, только базовая информация c для каждого тега.
Когда пользователь нажимает на тег, это инициирует вызов API для получения сведений о теге:
Запрос на отображение тега (теги / 1 или теги / свадьбы) возвращает тег с загруженными отношениями:
public function show($id)
{
$tag = Tag::where('id', $id)->with('images')->firstOrFail();
return new TagResource($tag); <-- will have all related images loaded.
}
2) настроить вложенную конечную точку REST, если необходимо
Вы можете использовать контроллеры ресурсов для быстрого выбора шаблона:
api. php
Route::apiResource('tags.images', 'tags\TagImageController');
Этот маршрут будет следить за вашими вызовами API и определять, будет ли он индексировать / хранить / показывать / удалять. С вашего внешнего интерфейса вы можете сделать вызов, например, https://backendsite.com/tags/1/images (Если тег свадьбы имеет идентификатор 1)
Тогда в TagImageController у вас будет что-то вроде этого:
public function index(Request $request, $id)
{
$tag = MemTag::find($id);
$images = $tag->images()->get();
$images->load(Image::allowedIncludes); <- or you can manually list relationships you want to load
return ImageResource::collection($images);
}