【问题标题】:Eloquent Eager Loading "Property [service_code] does not exist on this collection instance"Eloquent Eager Loading “此集合实例上不存在属性 [service_code]”
【发布时间】:2020-01-11 15:58:09
【问题描述】:

我无法弄清楚eager loading 如何与以下示例一起使用。这是我当前的数据库,其中包含两个表,Quotes:存储一般信息的位置,以及 QuotesDetails:存储 Quotes 中每个 Quote 的详细信息的位置。

在模型中,我有以下结构:

Quotes.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(在 Quotes 中),因为每个引号可以有/显示 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 中的关系,其名称为 ->quotedetails,该关系在 QuotesDetails.php 中有许多关联的注册表

    李>
  • 鉴于:使用“$quotes->quotesdetails->service_code”必须检索与quotes表关联的service_code(我正在使用foreach,因为quotesdetails每个报价可以有多个注册表)

    李>
  • 在模型中:我对 Quotes.php 使用“hasMany”,因为依赖表是 QuotesDetails,而 QuotesDetails.php 中的“belongsTo”是相反的原因。

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

【问题讨论】:

  • 您是否尝试过dd($quotes) 来查看quotesdetails 包含的内容? (quotesdetails 可能也是你需要foreach 的集合,因为它是一个集合,所以service_code 不存在)
  • 我使用了 echo '
    ' 。 print_r($returnquotes, true) 。 '
    ';并显示所有信息,来自报价和报价细节的信息。我不知道为什么它显示的结果与标签 [attributes:protected] => Array 和 [original:protected] => Array
    重复
  • 但可能你是对的,问题是我在依赖表中有一个集合。所以可能我必须为该集合循环循环

标签: php laravel eloquent eager-loading


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 2019-03-23
    • 2020-07-11
    • 2017-05-12
    • 2018-10-12
    • 2021-02-08
    相关资源
    最近更新 更多