Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Laravel 5.x » Создание и обновление наследников пользователей » 22.10.2018 16:50:24

x1onywka
Ответов: 1

Здравствуйте.
Если есть похожие темы, статьи, решения, отправьте меня туда. Спасибо.

Нужно создавать и изменять пользователей: клиентов, сотрудников

Есть таблица пользователей, в ней общие данные: имя, телефон почта.
Они ничего не знает о дочерних таблицах(нет полей с типом пользователя)
1. Таблица users: name, sername, phone, email, password, city_id

Таблицы клиентов и сотрудников наследуют таблицу пользователей по полю user_id, в отношении 1 к 1.
2. Таблица clients: activation, request_count, user_id...
3. Таблица staff: position_id, office_id, user_id...

Есть 3 модели с ресурс-контроллерами.
User. В ней есть fillable, sortable, dates и отношения к другим таблицам(client - данные о клиенте по user.id, staff - данные о сотруднике по user.id, city - город по полю city_id,  ...)
Client. Есть свои fillable, sortable, отношения к таблицам (user - 1 к 1, status ...)
Staff. Есть свои fillable, sortable, отношения к таблицам (user - 1 к 1, office ...)

Для валидации есть ClientRequest, StaffRequest. Они расширяют правила UserRequest.

Сейчас у меня все работает так:
Создать клиента - роут /clients/store. В контроллере приходится вызывать сначала $this->user->create(request), затем $this->client->create(request).
Создать сотрудника - заменить на staff
Думаю, что за это должна делать модель и контроллер User. Но тогда в контроллере надо делать проверку, кого создаем/изменяем и использовать разные реквесты(Если делать через условие). Либо создавать кастомные методы (CreateUser / CreateClient).
Как она будет узнавать кого создавать? 1. По роуту. Тогда надо писать кастом роут в дополнение к route::resource 2. Делать проверку в контроллере.

Вопрос1: Как правильно?
Вопрос2: Как правильно создавать записи вместе с отношением в одну строку? Что-то вроде CLient::with('user')->create(request) и он заполнит 2
таблицы?

-------
Обновляю записи так же, как создаю, но  методом update. В две строки. Сначала user, затем client.
Мне кто-то говорил, что лара умная и можно обойтись $model->save($data). Но у меня не выходит.

Вопрос3: как легко обновить модель и ее отношение с помощью request->all()


-------
Я использую laravel Collective для форм. При создании формы с моделью, часть данных не подставляется, потому что есть связь. Приходится ручками прописывать client->user->name.

Вопрос4: есть способы подставлять поля формы вместе со связью?

--------
Вопрос5: В правильном ли направлении я двигаюсь? Нужно ли наследовать таблицу? Как делаете вы?

Подвал раздела