gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Как лучше работать с двумя связями к одной таблице, отличающихся лишь сортировкой или фильтром?

Имею
/**
 * @return MorphMany
 */
public function images() : MorphMany
{
    return $this->{'morphMany'}(Image::class, 'model')
        ->select([
            'id',
            'model_type',
            'model_id',
            'album_collection',
            'location',
        ]);
}


которая просто тянет все имеющиеся `images` и потом класс Album работает с этими `images`.

С другой стороны когда я вывожу данные в верстку мне разумнее эти самые `images` сразу иметь сортированными по дате. Создал связь `imagesLatest`, которая
/**
 * @return MorphMany
 */
public function imagesLatest() : MorphMany
{
    return $this->images()
        ->addSelect([ 'created_at', 'updated_at' ])
        ->orderBy('updated_at', 'desc')
        ->orderBy('created_at', 'desc');
}


Но теперь все места в коде требуют `imagesLatest` вроде разумно и логично, но что-то некрасиво выходит. Временно в классе-альбоме написал

public function getImages() {
  return $this->relationLoaded('imagesLatest') ? $this->imagesLatest : $this->images;
}


Но может лучше можно как-то?
  • Вопрос задан
  • 60 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы