Как после union двух моделей в коллекции достать связанные данные
Мне нужно сделать как-то union двух моделей без потери сущности модели Video
(к Photo
моделе я делаю union Video
). После объединения я делаю пагинацию, и когда у меня уже есть коллекция спагинированная, я делаю маппинг
$data = $paginator->map(static fn($photoAlbum) => [
'id' => $photoAlbum->id,
//...
'image' => $photoAlbum->mainImage?->glideUrl(
$photoAlbum->type === 'video' ?
'video-m' : // это glide для картинок у видео
'photo-gallery-image' // это glide для картинок у фото
) ?? (
$photoAlbum->type === 'video' ?
no_image_url() : // фото у видео, когда нет картинки у сущности
no_photo_url() // фото у альбома, когда нет картинки у сущности
),
])->all();
И после получаю спагинированную модель Photo
, но в ней только Photo
:
И проблема заключается в том, что у меня в коллекции лежит модель Photo
, и соответственно когда я пытаюсь взять mainImage
(морф связь), то он всегда отдает mainImage
, где model === Photo
(на сколько я понимаю) а соответственно у всех видео, он не находит mainImage
по причине того что он пытается получить связь из модели Photo
.
Подскажите пожалуйста что можно с этим сделать? У меня был вариант делать не union
моделей, а сначала сделать запрос на Video
с пагинацией, потом на Photo
также с пагинацией, и потом объединить их в коллекцию и отсортировать их по дате публикации, но мне данный вариант не очень нравится, по причине, что при пагинации там может быть нарушен порядок элемента (из-за пагинации на каждую модель, а не на одну коллекцию с двумя моделями)