Как реализовывать наследование моделей в laravel? Интересует вопрос, как вы делаете наследование моделей в laravel? Например у меня есть модель User как объект хранящий в себе информацию о пароле, логине и тому-подобное. То есть в основном для авторизации всё. Далее от этой модели наследуется модель OrgAdmin - как администратор какой либо организации в приложении. В этой модели есть ссылка на саму организацию и тому подобное. Но есть и модель пользователя Profile (к примеру) которая также наследуется от User. При всём этом потомки имеют настолько разную структуру полей, что в одной таблице хранить не вариант (мне так кажется). Как в данном случае поступать? Как разбить на несколько таблиц это всё? И если это правильно, то как потом мне получить модель по id сразу собранную из 2х таблиц (users, profiles) например?
Если мой подход не правильный - то почему? Как можно обойти это всё кроме использования полиморфической связи?

21 Авг 2019 в 07:03
181 +1
0
Ответы
1

В Laravel наследование моделей можно реализовать с помощью механизма Eloquent ORM. В вашем случае, если у вас есть модели User, OrgAdmin и Profile, которые имеют различные структуры полей и не могут быть сохранены в одной таблице, то вам следует использовать отдельные таблицы для каждой из моделей.

Для создания разных таблиц для каждой модели вам нужно определить таблицу в каждой из моделей в свойстве $table:

class User extends Model
{
protected $table = 'users';
}
class OrgAdmin extends User
{
protected $table = 'org_admins';
}
class Profile extends User
{
protected $table = 'profiles';
}

Когда вы создаете объекты моделей User, OrgAdmin или Profile, Eloquent автоматически будет искать соответствующие записи в их соответствующих таблицах.

Если вам нужно получить модель из двух таблиц, то вам следует использовать соответствующие методы Eloquent для связей. Например, если у пользователя есть профиль, то вы можете использовать отношение hasOne() для этого:

class User extends Model
{
public function profile()
{
return $this->hasOne(Profile::class);
}
}

Затем вы можете получить пользователя с его профилем, используя Eager Loading:

$user = User::with('profile')->find($userId);

Этот подход позволяет вам разделить данные различных моделей по разным таблицам и работать с ними как с отдельными сущностями. Полиморфические связи также могут быть полезны в некоторых случаях, но в вашем случае использование отдельных таблиц кажется более подходящим.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 436 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир