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 - 从刀片视图中的模型关系中检索属性的主要内容,如果未能解决你的问题,请参考以下文章

从 Laravel 中的关系中检索关系

laravel刀片中的调用关系

刀片模板中的多对多关系中的 Laravel 嵌套查询

在刀片视图文件中使用laravel策略授权

Laravel 5 在刀片视图中调用模型函数

从 Laravel 中的控制器返回刀片组件