Массив Laravel отображается как ноль перед массивом данных - PullRequest
0 голосов
/ 17 сентября 2018

У меня есть пользователь, у которого много свойств.Этот пользователь также должен иметь возможность просмотреть ставку предложений на его свойства.

Итак, установите связь.

User.php

public function properties(){
    return $this->hasMany('App\Property');
}

Property.php

public function offers(){
    return $this->hasMany('App\Offer');
}

Тогда в моем контроллере вот что у меня есть:

public function my_offers(){

    $properties = Property::whereUserId(Auth::id())->get();


    return view('pages.seller.offers.index', compact('properties'));
}

Затем я перехожу к своим представлениям так:

@if($properties)
<ul>
    @foreach($properties as $property)

        <li>{{$property->offers->offer_message}}</li>

    @endforeach
</ul>
@endif 

Когда я просматриваю страницуЯ вижу следующую ошибку:

Свойство [offer_message] не существует в этом экземпляре коллекции.

Но это свойство существует в моей таблице.

Если я изменю свой элемент списка на элемент ниже, я смогу увидеть массив:

 <li>{{$property->offers}}</li>

Я также вижу это раньшеи после массива с данными есть два пустых массива, как показано на рисунке ниже:

enter image description here

Что-то, что я не правильно сделал?

1 Ответ

0 голосов
/ 17 сентября 2018

Если не у всех свойств есть предложения, то вам следует проверить, что перед <li>, кроме того, offers является коллекцией, вам нужно просмотреть ее, поэтому вы получите ошибку.

@if($properties)
@php ($i = 1)
<ul>
    @foreach($properties as $property)
        @if ($property->offers)
            @foreach ($property->offers as $offer)
                <li>Offer {{ $i++ }}: {{$offer->offer_message}}</li>
            @endforeach
        @endif
    @endforeach
</ul>
@endif

Если вы хотите получить только те свойства, которые имеют предложения ( Запрос наличия отношений ):

$properties = Property::whereUserId(Auth::id())->has('offers')->get();

И вам, вероятно, следует нетерпеливо загрузить эти отношения:

$properties = Property::whereUserId(Auth::id())->has('offers')->with('offers')->get();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...