好的,我试图设置一个范围,根据hasOne关系中的列限制返回哪些用户。
以下是我的用户模型中的两种方法:
public function scopeHasImage($query)
{
return $query->with(['profile' => function($query){
$query->where('avatar', '!=', '');
}]);
}
public function profile()
{
return $this->hasOne('App\Profile');
}
当我这样称呼时:
$users = User::HasImage()->simplePaginate(15);
所有这些都可以正常工作,直到我在我的刀片模板中显示代码如下:
@foreach($users as $user)
<div class="col-xs-12 col-sm-3 col-md-2">
<a href="{{ route('user.profile.public', ['id' => $user->id]) }}">
<img class="img-responsive" src="{{ $user->profile->avatar }}" />
</a>
</div>
@endforeach
导致此错误:
Trying to get property of non-object
我已经转储了$ user-&gt;个人资料,它是一个列出了属性的对象,其中一个属性是头像。所以我不确定为什么这不起作用。
任何想法都会非常感激。
答案 0 :(得分:2)
几乎可以肯定,您的某个用户没有附加个人资料。因为你可能只倾倒了第一个$user->profile
,你没有看到......
您可以通过将其包装在if:
中来解决此问题@foreach($users as $user)
@if($profile = $user->profile)
<div class="col-xs-12 col-sm-3 col-md-2">
<a href="{{ route('user.profile.public', ['id' => $user->id]) }}">
<img class="img-responsive" src="{{ $profile->avatar }}" />
</a>
</div>
@endif
@endforeach
或者首先排除没有个人资料的用户(这可能是你一直想要的)
public function scopeHasImage($query)
{
return $query->with('profile')->whereHas('profile', function($query){
$query->where('avatar', '!=', '');
});
}