Laravel关系-数据透视表中的其他字段链接到其他模型

时间:2019-07-04 03:18:23

标签: php laravel-5 laravel-blade laravel-5.8

我已将问题简化到了重点。我有三个表,usersrolesaccount

通常,我会将User模型设置为与角色具有多对多关系,但我希望这些角色特定于每个帐户。因此,我在数据透视表中添加了一个附加字段。这是我拥有的表和字段;

“用户”表

|—————————

| id | name |

|—————————

| 1 | Bob    |

| 2 | Jim     |

| 3 | Fred   |

|—————————

“角色”表

|—————————

| id | title |

|—————————

| 1 | Administrator    |

| 2 | Manager           |

| 3 | Approver           |

|—————————

“帐户”表

|—————————

| id | name |

|—————————

| 1 | ABC Company    |

| 2 | XYZ Shipping     |

| 3 | KLM Transport   |

|—————————

然后我有了数据透视表role_user以及该帐户的另一个数据透视字段;

|—————————

| role_id | user_id | account_id

|—————————

| 1         | 3           |  1

| 2         | 2           |  1

| 3         | 2           |  3

| 3         | 1           |  2

|—————————

在建立多对多关系时,我已经在belongsToMany函数上使用了withPivot函数。这使我可以使用$user->roles->pivot->account_id获取信息,但我需要的是能够获得该公司的名称。它传递到刀片模板的全部是数据透视表中的ID,而不是将其链接到实际的Account模型。

Eloquent是否有办法以与原始关系相同的方式获取整个模型?

1 个答案:

答案 0 :(得分:1)

创建自定义数据透视模型

use Illuminate\Database\Eloquent\Relations\Pivot;

class RoleUserAccountPivot extends Pivot
{
    public function user()
    {
        return $this->belongsTo(User::class);
    }

    public function role()
    {
        return $this->belongsTo(Role::class);
    }

    public function account()
    {
        return $this->belongsTo(Account::class);
    }
}

更新您的belongsToMany关系

下面是一个具有User::roles关系的示例

class User //extends...
{
    public function roles()
    {
        return $this->belongsToMany(Role::class, /*other parameters*/)->using(RoleUserAccountPivot::class)->withPivot('account_id');
    }
}

用法

$user->roles->first()->pivot->account // returns Account model

希望有帮助。


参考链接:

Laravel doc on custom pivots