尝试在 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"));
我有一个 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"));