Все привет!
Работаю на порталом "поиска работы", что-то похожее на hh.ru. На данный момент я реализовал регистрацию/авторизацию с помощью полифорфных связей, приведу небольшой пример:
- сущность Пользователь (User) хранит поля только email и password, имеет связь
public function profile()
{
return $this->morphTo();
}
это удобно тем что при авторизации достаточно иметь одну точку входа и система отдаст пользователя не зависимо от его типа;
- добавил две сущности Соискатель (Jobseeker) и Работодатель (Employer), имеют связь
public function user()
{
return $this->morphOne('App\User', 'profile');
}
По началу мне показался данный подход приемлемым, но чем дальше в "лес", тем больше сложностней ...
Кода я пытаюсь достать пользователя мне приходится вызывать следующим образом
Auth::user()->profile
// Проверять пользователя
Auth::user()->profile->isEmployer()
// Компания может обновить менеджера (рекрутера),
// для этого в сущность Employer метод update() ломаю голову что лучше передавать id User и доставать снова
$user = User::findOrFail($id);
$user->profile()->update(...)
//или id Employer и
$employer->findOrFail($id);
$employer->update(...)
// и самое больное место это создание и обновление пользователя,
// для меня этот кусок кода смотрится ужасно
// побочный эффект полиморфных связей
$employer = Employer::create([
'phone' => $request->get('phone'),
'full_name' => $request->get('full_name'),
'company_id' => Auth::user()->profile->company_id
]);
$employer->user()->create([
'email' => $request->get('email'),
'password' => $request->get('password')
]);
Следом я нашел другую реализацию, с помощью добавления нового guard в конфиге auth, но при этом подходе как мне кадется придется дублировать контроллеры авторизации, регистрации и тд..
Буду признателен за дельный совет, спасибо!