Php 在使用Relaship进行筛选时,尝试获取非对象属性时发生Larvel错误

Php 在使用Relaship进行筛选时,尝试获取非对象属性时发生Larvel错误,php,laravel,Php,Laravel,当我尝试获取的值时,尝试获取非对象的属性时出现错误 {{ $user->adminProfile->company_name }} 这里adminProfile与用户模型有关系。关系定义正确 当我使用 $users = User::role('admin')->with('adminProfile')->get(); 它工作得很好。然而,当使用一个以上的过滤器时,我会得到错误 $users = User::role('admin')->with(['adminP

当我尝试获取的值时,尝试获取非对象的属性时出现错误

{{ $user->adminProfile->company_name }}
这里adminProfile与用户模型有关系。关系定义正确

当我使用

$users = User::role('admin')->with('adminProfile')->get();
它工作得很好。然而,当使用一个以上的过滤器时,我会得到错误

$users = User::role('admin')->with(['adminProfile' => function($q) {
    $q->where('status', 1);
}])->get();

问题是,您正在使用admin角色获得所有用户,但您只加载状态为1的
adminProfiles

这意味着您将拥有
adminProfile
关系将返回
null
的用户

为了筛选出没有状态为1的
adminProfile
的用户,您必须使用a,而不是状态为1的

$users = User::role('admin')->whereHas(['adminProfile' => function($q) {
    $q->where('status', 1);
}])->get();

问题是,您正在使用admin角色获得所有用户,但您只加载状态为1的
adminProfiles

这意味着您将拥有
adminProfile
关系将返回
null
的用户

为了筛选出没有状态为1的
adminProfile
的用户,您必须使用a,而不是状态为1的

$users = User::role('admin')->whereHas(['adminProfile' => function($q) {
    $q->where('status', 1);
}])->get();

与用户相关的管理员配置文件的状态是否为
1
?是。它的布尔值为1或0。你得到了一个集合,想要得到模型值。你能给我们看看这个关系吗?
return$this->hasOne(AdminProfile::class)
返回$this->belongsTo(User::class)这是摘要是与用户相关的管理员配置文件的状态
1
?是。它的布尔值为1或0。你得到了一个集合,想要得到模型值。你能给我们看看这个关系吗?
return$this->hasOne(AdminProfile::class)
返回$this->belongsTo(User::class)这是总结,谢谢。但我觉得我没能解释清楚。AdminProfile也是一个模型,与用户模型只有一个关系。我正在利用与的关系。状态是AdminProfile模型中的一列。基本上我使用2个过滤器-按管理员角色和状态;来自不同表的每个用户您只想显示其
adminProfile
上状态==1的用户,对吗?谢谢。但我觉得我没能解释清楚。AdminProfile也是一个模型,与用户模型只有一个关系。我正在利用与的关系。状态是AdminProfile模型中的一列。基本上我使用2个过滤器-按管理员角色和状态;来自不同表的每个用户您只想显示其
adminProfile
上状态==1的用户,对吗?