Как работать с отношениями в Laravel без второстепенных моделей?
Всем привет!
Доки по отношениям как-бы всё ясно раскрывают - есть у нас модель User, у $user может быть телефон, значит мы делаем отношение между моделью User и Phone. А что, если я не хочу создавать отдельную модель для Phone, но всё также хочу получать расширенные данные о телефоне из другой таблицы?
У меня ситуация такая, когда у меня есть некая таблица Metadata (на ней основывается модель Metadata). И есть таблица с переводами для каждого элемента из Metadata (MetadataTranslations). Отдельно логического основания для создания модели перевода для Metadata я не вижу - переводы существуют только в подчинении у Metadata (MetadataTranslation никогда не будет переназначен другой модели Metadata, как это могло бы быть с Phone и User или Comment и Post). Соответственно, я бы хотел чтобы все операции с Metadata и переводами осуществлялись в рамках модели Metadata.
Я не так давно разбираюсь с Laravel, но вот немного не могу вникнуть в то, как правильно бы подойти к архитектуре. По возможности, объясните, как бы сделали вы в моей ситуации, которую я описал выше. Спасибо
В данном случае я просто уточнил, что у меня это перевод, но там могли быть любые другие сущности, которые не стоило бы выделять в отдельные модели, а работать в рамках содержащего их контейнера.
>>> В случае если это отношение один к одному, то можно обойтись обычным джойном
А как быть с save(), delete() и пр.? Нужно переписать эти методы самостоятельно или я где-то дико туплю и не вижу более удобного способа?
Alex Me: >>>А как быть с save(), delete() и пр.? Нужно переписать эти методы самостоятельно или я где-то дико туплю и не вижу более удобного способа?
Если не пользоваться Eloquent, то соответственно все манипуляции с таблицей придется делать ручками) через Query Builder. Думаю Вам просто стоит поработать с ORM. Вам понравится )
На более прямолинейных задачах у меня всё хорошо с ORM получается, очень удобно конечно.
Но тут я вроде себе нарисовал как всё должно работать, а реализовать эту задумку не получается. То есть нужно запихнуть свой придуманный "куб" в "цилиндрическое отверстие" фреймворка. По идее надо отойти от того, что модель должна отражать некую логическую сущность, а просто клепать их столько, сколько надо для работы с ORM. Так получается?
Alex Me: Eloquent это реализация шаблона Active Record где экземпляр модели является записью в таблице. Всю логику можно вынести в сервисный слой, команды или события (или если логика очень простая, то можно оставить и в контроллере), а ORM использовать для работы с бд.