2015-04-16 3 views
0

Итак, я пытаюсь разгадать полиморфизм в laravel.Проблемы с полиморфными отношениями в ларавеле

Я строй сайта, который имеет 2 различных типов пользователей (вербовщики, кандидаты)

Они оба имеют некоторые общие детали, которые я создал в таблице пользователей:

| id | Имя пользователя | электронная почта | пароль | detailable_id | detailable_type

Остальные детали будут очень разными, поэтому я думал, что смогу использовать полиморфизм, чтобы помочь мне в этом. поэтому я создал еще 2 таблицы:

рекрутеров -> чтобы содержать рекрутер конкретные детали

кандидатов -> содержать кандидатов конкретные детали

У меня есть модели для каждой таблицы

модель

пользователя:

class User extends Model implements AuthenticatableContract, CanResetPasswordContract { 

    use Authenticatable, CanResetPassword; 

    protected $table = 'users'; 

    protected $fillable = ['username', 'email', 'password']; 

    protected $hidden = ['password']; 

    public function detailable() 
    { 
     return $this->morphTo(); 
    } 
} 

кандидат модель:

class Candidate extends Model { 

    public function user() 
    { 
    return $this->morphOne('App\User', 'detailable'); 
    } 

} 

Рекрутер модель:

class Recruiter extends Model { 

    public function user() 
    { 
     return $this->morphOne('App\User', 'detailable'); 
    } 
} 

Так что я сделал это так, как большинство учебников объясняют это следующим образом (большинство из них объяснить, как комментарии могут быть добавлены на различные объекты) Это, однако, не работает так, как мне это нужно к. В этом я могу сделать что-то вроде $user = App\Recruiter::find($recruiter_id)->user, чтобы получить пользователя, если у меня есть идентификатор или объект рекрутера. Но то, что я в идеале хочу сделать, - это сказать $details = App\User::find('$user_id')->details или Auth::user()->details

Я действительно не могу обмотать голову, как бы я сделал эту работу, может ли кто-нибудь помочь? Или, может быть, скажите мне, что это нельзя сделать

ответ

0

Я чувствую себя довольно глупо, поскольку я только что нашел ответ в документации Laravels. Вы можете делать то, что мне нужно с этой настройкой, все, что мне нужно сделать, это тип Auth::user()->detailable, и это возвращает данные для пользователя

Смежные вопросы