laravel中的多态关系问题

时间:2015-04-16 13:04:13

标签: php mysql laravel polymorphism

好的所以我试图在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之类的事情来获取用户,如果我有招聘人员ID或对象。但理想情况下我想做的就是说$details = App\User::find('$user_id')->detailsAuth::user()->details

我真的无法理解我是如何做这项工作的,有人可以帮忙吗?或者也许告诉我这不能完成

1 个答案:

答案 0 :(得分:0)

我觉得非常愚蠢,因为我刚刚在Laravels文档中找到答案。您可以使用此设置执行我需要的操作,我只需键入Auth::user()->detailable并返回用户的详细信息