雄辩的5.4,hasOneThrough方法?

时间:2019-05-09 15:03:07

标签: php laravel eloquent

我知道hasOneThrough已经引入了最新的Laravel版本,但是我现在还不能真正升级。做这个的最好方式是什么?

我有一个users表,我无法更改其结构,但是我需要为这些用户分配一个role,所以我创建了一个数据透视表,在我的User模型中添加方法以获取角色,用户只能拥有一个

表格:

users user_roles user_assigned_roles

我可以使用hasManyThrough,但这会期望很多,我想返回一个模型而不是一个集合。

1 个答案:

答案 0 :(得分:1)

您可以结合使用one-to-oneone-to-many关系来管理此问题,然后通过accessor访问角色:

`users` 1 --- 1 `user_assigned_roles` m ---- 1 `user_roles`

因此,在UserAssignedRole模型中:

/** UserAssignedRole.php */

public function role()
{
    return $this->belongsTo('App\UserRole');
}

然后在您的User模型中:

/** User.php */

public function assigned_role()
{
    return $this->hasOne('App\UserAssignedRole');
}

// defining an accessor for your role:
public function getRoleAttribute()
{
    return $this->assigned_role->role;  // <--- Access the role of 'UserAssignedRole'
}

因此,在您的控制器(或您想要的任何位置)中,您可以执行以下操作:

/** UsersController.php */

public function myFunction()
{
    $user = User::find(1);
    $role = $user->role; // <--

    dd($role->name);

    //
}

PS1:我强烈建议您to upgrade to the latest version of Laravel使用这些新功能以及出于安全原因,修复程序等。

PS2:Eloquent Has Many Deep有一个名为Jonas Staudenmeir的软件包,可以为您管理这种关系(以及更多)。