@RMate

Есть ли паттерн для morph связи?

Всем привет!
У меня есть несколько сущностей, с общей чертой - к каждой из них может быть сокращенная ссылка, с набором своих возможностей.
Я сделал отношение между другими сущносятми и таблицей сокращенных ссылок через Morph-связь.
Теперь, в контроллере я имею такой код:

public function show(ShortLink $link)
  {
    $model = $link->shortable;  // Получаем связанную с сокрашенной ссылкой модель
    if ($model instanceof Offer) {
        //
    }
  }


Но что-то внутри меня подсказывает, что это далеко не самый правильный путь. Подскажите, пожалуйста, как правильно организовывать подобную логику?
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Морфы я бы сказал сами по себе такой костылек, легкий
Обычно в теории бд есть связи один ко многим, а сущности каждая имеют свою таблицу.

Морфа в данном случае нужна скорее сущности чтобы вытянуть ссылку только в случае если "тип равно сущность".

С тем же успехом можно просто хранить ссылки и иметь таблицы привязки ссылок к сущностям отдельно

Ссылки
Видосы
Картинки
СсылкиВидосы
СсылкиКартинки

морф в данном случае выглядит так

Ссылки
Видосы
Картинки
СсылкиШтуки (type: видосы/картинки)
(?) ТипыШтук(1. видосы, 2. картинки)

По делу как с этим работать:

Модели для каждой таблицы
Класс-Команда "ПолучательШтукиПоСсылке"
-- получить(ссылка)
Класс-Команда "ПолучательШтукиПоИдИТипу"
-- получить(ид, тип)
Контроллер Линки
-- ПолучательШтукиПоСсылке->получить(ссылка)
Контроллер Картинки
-- ПолучательШтукиПоИдИТипу->получить(картинка, ид)
Контроллер Видосы
-- ПолучательШтукиПоИдИТипу->получить(видос, ид)

$link = Ссылки::with('image')->where('code', '123456myshortlink')->first();
return $link->image;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@vism
верно все, для этого и придуманы морфы. Оно даёт красоту решений.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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