Laravel - 自定义枢轴模型中的属于关系不起作用

use*_*273 1 php mysql laravel laravel-5

Edit:
I dont think its the same issue as:
/sf/ask/2801605061/
because in that issue hasMany relationship is used which returns an array but i used belongsTo which should return a certain object.
Run Code Online (Sandbox Code Playgroud)

我有一个数据库结构,其中用户和公司表之间存在多对多关系。为此,我有一个交叉引用表 company_user。此外,每个用户在公司中都有特定的角色,因此交叉引用表也有一个 role_id。问题是,由于某种原因,当我尝试从交叉引用表中检索角色时出现异常。

这是我在公司模型中定义关系的方式:

public function users() {
    return $this->belongsToMany('App\User')->withPivot('role_id')->using('App\CompanyUser');
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我只是尝试从 pivot 获取 role_id 一切正常:

@foreach($company->users as $user)
    {{$user->pivot->role_id}} // this displays correct role_id
@endforeach
Run Code Online (Sandbox Code Playgroud)

但我也需要角色的数据,所以我在我的自定义数据透视中定义了一个关系。这是整个模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Relations\Pivot;

class CompanyUser extends Pivot
{
    public function role()
    {
        return $this->belongsTo('App\Role');
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图像这样访问它:

@foreach($company->users as $user)
    {{$user->pivot->role()->id}}
@endforeach
Run Code Online (Sandbox Code Playgroud)

但这给了我一个例外:

Undefined property: Illuminate\Database\Eloquent\Relations\BelongsTo::$id 
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

小智 5

尝试更改为

@foreach($company->users as $user)
    {{$user->pivot->role->id}}
@endforeach
Run Code Online (Sandbox Code Playgroud)

  • 好的答案——如果它包含几行关于 OP 的原始代码有什么问题以及为什么要修复它,那就更好了! (2认同)