Задать вопрос
DJZT
@DJZT
Laravel - code for you

Как хранить наследуемые модели Laravel в БД?

Здравствуйте сообщество. Подскажите как работать с наследованием моделей на примере (User, Admin) или (User, Person, Organization) где от User наследуются Admin/Person/Organization. Как их хранить в БД? В частности интересуют лаконичные решения в Laravel, но можно и не привязываться.
По идее при обращении к свойству модели Admin, я должен иметь доступ и к свойствам из модели User. Но как они туда будут попадать? В конструкторе придётся делать заполнение их?
Также при сохранении придётся писать обработчик на событие?
Как этот процесс происходит?

Так же интересны решения для примера, что у каждого типа объекта есть разные dashboard но по одной ссылке (example.com/dashboard). Как делать проверку и привязывать соответствующие контроллеры? Либо контроллер делать один, но вызывать parent методы для реализации разных функционалов?

В общем помогите поднять уровень.
ссылки приветствую
  • Вопрос задан
  • 425 просмотров
Подписаться 3 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
AmdY
@AmdY
PHP и прочие вебштучки
Не надо БД и модели рассматривать как что-то совместное. Это нормальная ситуация, когда несколько моделей ссылаются на одни и те же таблицы и их колонки в зависимости от контекста поведение может быть разным. martinfowler.com/bliki/BoundedContext.html
При этом модели не обязательно должны (но могут) наследоваться друг от друга, лучшим заменять наследование композицией, тоесть у Admin/Person/Organization будет метод который возвращает User. С учётом Eloquent самый простой и топорный способ, это связь 1-1, что-то вроде
Admin/Person/Organization {
      function user() {  return $this->hasOne('User', 'id', 'id'); }
}
Ответ написан
Комментировать
Denormalization
@Denormalization
Для чего использовать разные модели?
Для этой цели нужно использовать механизм ролей.
А для механизма ролей можно использовать https://github.com/Zizaco/entrust
Городить отдельные модели под каждую роль нет смысла.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы