我有一个具有许多属性的用户。该用户还应该可以在其属性上通过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>
我还看到带有数据的数组前后,有两个空数组,如下图所示:
有什么我不正确的东西吗?
答案 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();