首页 > 解决方案 > 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 不显示并给出错误。

老实说,我相信它必须与这个模式一起工作,但我不知道为什么不工作。我的想法:

任何有助于理解使用 eloquent 和 laravel 进行急切加载的逻辑的帮助。

标签: phplaraveleloquenteager-loading

解决方案


$quotes->quotesdetails是一个集合本身(有很多),因此您需要使用另一个 foreach 对其进行迭代:

@foreach ($returnquotes as $quotes)
  {{$quotes->shipcity }}
  @foreach ($quotes->quotesdetails as $quotedetail)
    {{$quotedetail->service_code }}
  @endforeach
@endforeach

推荐阅读