Laravel 拉维关系:试图获得财产';名称';非对象

Laravel 拉维关系:试图获得财产';名称';非对象,laravel,eloquent,relationship,Laravel,Eloquent,Relationship,我希望有人能在这里帮助我,因为这让我头疼 我有两种型号,成分和计量单位 在这方面,我有: public function uom() { return $this->belongsTo(Uom::class, 'uom'); } 每种成分只有一个计量单位。数据库中的uom列是保存度量单位id的列 以计量单位表示,我有: public function ingredients() { return $this->hasMany(Ingredient::class);

我希望有人能在这里帮助我,因为这让我头疼

我有两种型号,成分和计量单位

在这方面,我有:

public function uom() {
    return $this->belongsTo(Uom::class, 'uom');
}
每种成分只有一个计量单位。数据库中的uom列是保存度量单位id的列

以计量单位表示,我有:

public function ingredients() {
    return $this->hasMany(Ingredient::class);
}
每个计量单位可能有许多成分

在成分表迁移中,我设置了外键,如下所示:

$table->foreign('uom')->references('id')->on('uoms')->onDelete('cascade');
有人能告诉我为什么在下面的表格里

Trying to get property 'name' of non-object 
刀片代码:

@foreach ($ingredients as $ingredient)
    <tr>
        <td>{{$ingredient->name}}</td>
        <td>{{$ingredient->uom->name}}</td>
        <td>{{$ingredient->user->name}}</td>
    </tr>
@endforeach
@foreach($components作为$component)
{{$component->name}
{{$Component->uom->name}
{{$component->user->name}
@endforeach
$component->user->name在引用“added\u by”列时非常有效,所以我不知道为什么计量单位不起作用


提前感谢您的帮助,我希望我只是忽略了一些愚蠢的事情

您遇到的问题是,属性与关系方法同名:
uom
。如果您将配料上的列名从
uom
更改为
uom\U id
,并更改模型中的关系方法,则该行将声明以下内容:

public function uom() {
    return $this->belongsTo(Uom::class);
}
这应该可以解决你的问题(加上这段关系的运作方式就像Laravel想要的那样)


Laraval有两个选项:返回关系(uom方法)或属性(数据库中的整数)。显然,它返回的整数不是对象,因此没有方法
name

发生这种情况的原因是,您显然有一种没有任何计量单位的成分。也许这有点帮助。Dilip提供的解决方案为这段关系增加了一个退路。我得到了退路,这太棒了。我以前不知道什么。问题是数据库中的所有数据在配料表的uom列中都有整数。所以不知怎么的,它没有检测到外键分配,我想,我看到了问题所在。我将添加我的答案!是的,成功了,谢谢!