eloquent 有限制的急切加载范围?
eloquent scope to eager load with constriant?
好的,所以我正在尝试设置一个范围,该范围将根据 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);
所有这些工作正常,直到我像这样在我的 blade 模板中显示代码:
@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->profile,它是一个 object,其中列出了属性,其中一个属性是头像。所以我不确定为什么这不起作用。
如有任何想法,我们将不胜感激。
几乎可以肯定您的一位用户没有附加个人资料。因为你可能只丢弃了第一个 $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', '!=', '');
});
}
好的,所以我正在尝试设置一个范围,该范围将根据 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);
所有这些工作正常,直到我像这样在我的 blade 模板中显示代码:
@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->profile,它是一个 object,其中列出了属性,其中一个属性是头像。所以我不确定为什么这不起作用。
如有任何想法,我们将不胜感激。
几乎可以肯定您的一位用户没有附加个人资料。因为你可能只丢弃了第一个 $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', '!=', '');
});
}