Laravel - 从刀片视图中的模型关系中检索属性
Posted
技术标签:
【中文标题】Laravel - 从刀片视图中的模型关系中检索属性【英文标题】:Laravel - retrieving attribute from within a model relationship in a blade view 【发布时间】:2019-02-26 20:33:30 【问题描述】:我使用名为“previous_owner
”的外键创建了产品和用户之间的关系。当我将传递给视图的值转储时,我可以看到我所追求的数据在以下位置可用:
$product->relations->product_owner->user->attributes->name
但是我如何从我的视图中访问它。我正在尝试遍历产品,然后执行以下操作:
$product->product_owner->user->name
或
$product->product_owner->name
但它不起作用,继续获取:
" 试图获取非对象的属性 'name'"
【问题讨论】:
请运行dd($product->product_owner);
并告诉我结果。
你的关系函数名product_owner
和外键product_owner
是一样的!这很令人困惑,因此您要么必须将关系函数名称更改为 FK 以外的名称,要么通过将函数调用为 product_owner()
来强制它 + 试试我的答案!
函数和外键不一样,外键叫previous_owner_id,函数叫product_owner
【参考方案1】:
在你看来代码一定是这样的
@foreach($products as $product)
$product->product_owner->name
@endforeach
此代码表示每个产品都有 product_owner。当一个产品没有product_owner
时,$product->product_owner
的 case 值为 Null,然后您的代码为 null->name
,您会收到错误消息。要修复它,您必须检查关系是否为空或使用 ??
运算符。将您的代码更改为
@foreach($products as $product)
$product->product_owner->name ?? ''
@endforeach
或
@foreach($products as $product)
@if($product->product_owner)
$product->product_owner->name
@endif
@endforeach
【讨论】:
这确实是问题所在,我的测试数据中有一些漏洞。我重新运行了播种机,然后它工作得很好。也就是说,不知道这种转换对我来说是很好的学习,将继续使用它来确保我不会因为同样的原因再次出现这个错误。谢谢大家!!!【参考方案2】:如果name
是属性,product_owner
是关系函数,请尝试以下操作:
$product->product_owner()->name
【讨论】:
【参考方案3】:您的 product_owner 不是 stdClass。它是数组。所以你不能用“->”操作符访问这个数组的这个键。试试
$product->product_owner['name']
【讨论】:
以上是关于Laravel - 从刀片视图中的模型关系中检索属性的主要内容,如果未能解决你的问题,请参考以下文章