@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) еще варианты ... ?
  • Вопрос задан
  • 107 просмотров
Пригласить эксперта
Ответы на вопрос 1
iMedved2009
@iMedved2009
Не люблю людей
Ну если структуру менять нельзя (я бы посоветовал подумать - в начале такие вещи несколько легче сделать чем потом когда это все обрастет.....) то тогда бы я наследовал модели Client, Customer, Manager от User, переопределил метод newQuery что бы он автоматом делал join нужных таблиц и подтаскивал из них данные и они были доступны сразу, и переопределил бы метод save где он бы распихивал данные по тем таблицам что нужно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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