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