Привет, друзья.
Используется 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) еще варианты ... ?
runprogr, ну просто если они не участвуют в выборке ну то есть по ним нет условий, то самое простое будет добавить понятие UserRole, все эти поля вынести к чертям в UserData и пихать в поле json. или в текст и в модели поставить $casts = [ 'data' => 'object'] пусть Laravel сам там парится. Тогда у нас будет 1 нормальная сущность - Пользователь. В FormRequest захерачить requiredIf для полей и иже с ними
Ну если структуру менять нельзя (я бы посоветовал подумать - в начале такие вещи несколько легче сделать чем потом когда это все обрастет.....) то тогда бы я наследовал модели Client, Customer, Manager от User, переопределил метод newQuery что бы он автоматом делал join нужных таблиц и подтаскивал из них данные и они были доступны сразу, и переопределил бы метод save где он бы распихивал данные по тем таблицам что нужно.