@runprogr

Как правильнее сделать расширение объектов?

Привет, друзья.
Используется laravel + админка Orchid.
Есть сущность User с соответствующей таблицей БД.
Помимо этого есть сущности Client, Customer, Manager и тд, тоже со своими таблицами и уникальными полями. Каждая из них связана с User 1 к 1.

Есть админка, в которой необходимо создать CRUD операции для каждой из сущностей.
Учитывая что создаем мы Client/Customer/Manager, а они не могут существовать без User, необходимо принимать на вход данные сразу для 2 сущностей при create/update операциях.
Как лучше и правильнее реализовать и почему ?

1) Создать класс request для User, где будут перечислены все нужные поля и валидации. Далее отнаследовать этот класс для каждой расширенной сущности (Client, Customer, Manger). Добавив дополнительные поля и правила валидации. Для каждой сущности будет свой класс request, каждый из которых будет содержать в плоской иерархии все поля юзера. Потом вычленять поля юзера и остальные поля и сохранять отдельно 2 сущности в БД (User + расширенная сущность)
2) Создать класс request для User, где будут перечислены все нужные поля и валидации. Далее создать класс для каждой расширенной сущности (Client, Customer, Manger). И добавить поле 'user' внутри которого будет лежать вложенный объект. Получаем вертикальную иерархию. Потом сохранять отдельно 2 сущности в БД (User + расширенная сущность). Этот вариант осложнен тем, что админка, вроде как, рассчитана чисто под плоскую иерархию и не подразумевает наличие вложенных объектов.
3) еще варианты ... ?
  • Вопрос задан
  • 106 просмотров
Пригласить эксперта
Ответы на вопрос 1
iMedved2009
@iMedved2009
Не люблю людей
Ну если структуру менять нельзя (я бы посоветовал подумать - в начале такие вещи несколько легче сделать чем потом когда это все обрастет.....) то тогда бы я наследовал модели Client, Customer, Manager от User, переопределил метод newQuery что бы он автоматом делал join нужных таблиц и подтаскивал из них данные и они были доступны сразу, и переопределил бы метод save где он бы распихивал данные по тем таблицам что нужно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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