尝试在 int - Laravel 8 上读取 属性 "email"

Attempt to read property "email" on int - Laravel 8

我有一个 Work 模型,其中一个属性是请求者,我正在尝试获取请求者的数据(我已经可以获取主键)。

我这样调用视图:

    $obras = Obra::all();
    return view("obra.index", compact("obras"));

观点:

    @forelse ($obras as $i)
        <li>{{ $i->requestor_id->email }}</li>
    @empty

工作模型中的关系:

    public function requestor_id(){
    
    return $this->hasOne(User::class);
    }

表格:

用户(申请人)有:id、姓名、电子邮件、密码等

作品有:id,user_id,start_date等

我认为这是因为关系的名称。您可以尝试将其重命名为 requestor。 Laravel 有一些在下划线上运行的内部行为。它可能 return 只有 id。

public function requestor()
{    
    return $this->hasOne(User::class);
}

问题好像是我的关系搞错了,我不得不在请求者模型中使用hasOne(最后我使用了hasMany,因为一个人可以创作不止一个作品)并在工作模型中使用 belongsTo.

重要注意:模型中函数的名称不能与table中字段的名称相同。同样在我的例子中,列名不遵循 laravel/eloquent 命名法,因此将另一个参数添加到 belongsTo 和字段名称。

工作模式:

public function solicitante(){
    return $this->belongsTo(User::class, "requestor_id");
}

请求者模型:

 public function obra(){
   return $this->hasMany(Obra::class, "requestor_id");
}

以及如何获取请求者数据:$obra->solicitante->email

在控制器中导入 use App\Models\Obra;

use App\Models\Obra;

$obras = Obra::all();
return view("obra.index", compact("obras"));