Eloquent Eager Загрузка «Свойство [service_code] не существует в этом экземпляре коллекции» - PullRequest
0 голосов
/ 11 января 2020

Я не могу понять, как нетерпеливая загрузка работает со следующим примером. Это моя текущая БД с двумя таблицами: Quotes: где хранится общая информация и QuotesDetails: где хранится информация о каждой цитате в Quotes.

enter image description here

В моделях у меня есть следующие структуры:

Кавычки. 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')" в контроллере, он должен установить sh отношение, которое появляется в кавычках. php with name -> quotedetails что есть несколько реестров, связанных с QuotesDetails. php

  • в представлении: при использовании "$ quotes-> quotesdetails-> service_code" необходимо получить код service_code, связанный с таблицей кавычек (я использую foreach, потому что quotesdetails может иметь несколько реестров на одну цитату)

  • в модели: я использую "hasMany" для цитат. php, потому что зависимой таблицей является QuotesDetails и "ownTo" в QuotesDetails. php по обратной причине.

любая помощь, чтобы понять логи c активной загрузки с eloquent и laravel приветствуется.

1 Ответ

1 голос
/ 11 января 2020

$quotes->quotesdetails - это сама коллекция (имеет много ), поэтому вам нужно выполнить итерацию по ней, используя другой foreach:

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