php - Eloquent Eager Loading “此集合实例上不存在属性 [service_code]”
问题描述
我无法弄清楚急切加载如何与以下示例一起使用。这是我当前的数据库,其中包含两个表,Quotes:存储一般信息的位置,以及 QuotesDetails:存储 Quotes 中每个 Quote 的详细信息的位置。
在模型中,我有以下结构:
报价单.php
class Quotes extends Model
{
public function quotesdetails()
{
return $this->hasMany('App\QuotesDetails', 'quoteid', 'id');
}
}
和 QuotesDetails.php 具有以下模型:
class QuotesDetails extends Model
{
public function quotes()
{
return $this->belongsTo('App\Quotes', 'id', 'quoteid');
}
}
我使用了 hasMany(在引号中),因为每个引号可以包含/显示 3-4 个引号细节。
在我的控制器中,我使用以下查询:
$returnquotes = Quotes::with('quotesdetails')->where('id', '=', $quoteid)->get();
在我看来,我使用以下结构:
@foreach ($returnquotes as $quotes)
{{$quotes->shipcity }}
{{$quotes->quotesdetails->service_code }}
@endforeach
shipcity 显示信息没有问题,但 service_code 不显示并给出错误。
老实说,我相信它必须与这个模式一起工作,但我不知道为什么不工作。我的想法:
在控制器中:在控制器中使用“with('quotesdetails')”,它必须建立出现在 Quotes.php 中的关系,其名称为 ->quotesdetails,该关系在 QuotesDetails.php 中有许多关联的注册表
鉴于:使用“$quotes->quotesdetails->service_code”必须检索与报价表关联的服务代码(我使用的是foreach,因为quotesdetails每个报价可以有多个注册表)
在模型中:我对 Quotes.php 使用“hasMany”,因为从属表是 QuotesDetails,而 QuotesDetails.php 中的“belongsTo”是相反的原因。
任何有助于理解使用 eloquent 和 laravel 进行急切加载的逻辑的帮助。
解决方案
$quotes->quotesdetails
是一个集合本身(有很多),因此您需要使用另一个 foreach 对其进行迭代:
@foreach ($returnquotes as $quotes)
{{$quotes->shipcity }}
@foreach ($quotes->quotesdetails as $quotedetail)
{{$quotedetail->service_code }}
@endforeach
@endforeach
推荐阅读
- python - 如何通过带有字符串的列条件从熊猫数据框中删除行 - 不断收到错误“真值不明确”
- javascript - 如何从 div 父级更改类?
- javascript - ReactJS - onSubmit 函数未执行
- android - Google Sceneform SDK 到底是什么?
- firebase - cloud firestore测试模式vs锁定模式有什么区别?
- css - 带有“动画:破折号 5s 线性交替无限”的 svg 路径动画;不仅在 Firefox 中工作
- javascript - 如何在不同的设备上呈现相同的图片?
- python - 2个向量场的张量点
- winapi - 打印对话框中的打印机图标
- javascript - 如何根据 redux store 导出不同的内容来响应组件?