Laravel数组在数据数组之前显示为null

时间:2018-09-16 23:13:25

标签: laravel

我有一个具有许多属性的用户。该用户还应该可以在其属性上通过tp查看优惠投注。

设置关系。

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 :(得分:1)

如果不是所有属性都具有要约,那么您应该在<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

如果您只想获取具有要约(Querying Relationship Existence)的de属性:

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

您可能应该eager load这种关系:

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