我已将问题简化到了重点。我有三个表,users
,roles
,account
。
通常,我会将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是否有办法以与原始关系相同的方式获取整个模型?
答案 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);
}
}
下面是一个具有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
希望有帮助。
参考链接: