【发布时间】:2020-04-26 23:20:19
【问题描述】:
在当前的应用程序中,有一个模型Part和一个模型Supplier。每个零件都有一个供应商。
public function supplier()
{
return $this->belongsTo(Supplier::class);
}
我添加了一个访问器来获取供应商的名称。
如果我返回整个数据集,我会得到供应商:
public function getSupplierNameAttribute()
{
return $this->supplier;
}
"supplierName": {
"id": 1,
"uuid": "37e3a715-09d3-4fac-ae88-8f12e63fe79c",
"name": "Laserteam",
"street": "8602 Dessie Tunnel",
"zip": "15869",
"city": "New Clementview",
"email_send_type": null,
"active": 0,
"created_at": "2020-01-09 09:46:02",
"updated_at": "2020-01-09 09:46:02",
"deleted_at": null,
"action": "",
"activeLabel": "<span class='badge badge-secondary'>Inaktiv<\/span>"
},
如果我尝试只获取名称(我最终需要的),则会出现错误:
public function getSupplierNameAttribute()
{
return $this->supplier->name;
}
ErrorException: Trying to get property 'name' of non-object in file /gopanel/sites/7industry_net/public/7time/app/Models/Part/PartAttribute.php on line 48
如果我以这种方式尝试,它会起作用:
public function getSupplierNameAttribute()
{
return $this->supplier['name'];
}
为什么return $this->supplier->name; 不起作用?
【问题讨论】:
-
只是一个想法,但尝试在关系函数上添加foreignKey。 : return $this->belongsTo(Supplier::class,'foreignKey');
-
看起来应该可以了。你确定你在任何地方都没有
toArray吗?或者您曾经在某个地方拥有它并且尚未重新加载 tinker(如果您正在使用 tinker)? -
看起来很傻,但是尝试
$g = $this->supplier;然后return $g->name如果在返回之前失败dd($g);看看里面有什么。
标签: laravel eloquent laravel-6