我试图从数据库返回一个集合,其中包含一个“用户组”及其相关用户。但是,我希望选择标准基于相关表中的用户是否受过培训。如果是这种情况,我希望将该行/条目从最终集合中排除。
基本上,我想:
返回“greengroup”类型的所有组,其中至少有一个相关员工未经培训,并在表中仅显示未经培训的员工。
这样它将返回如下对象:
0: {
id: 2,
group: GreenGroup,
size: 4,
employees: {
0: {name: 'Jane', isTrained: 0},
1: {name: 'Jeremy', isTrained: 0}
}
}
但现在,它正在查找greengroup,但会返回该组中的所有用户。我正在寻找一种在查询生成器中排除它们的方法。到目前为止,我得到的是:
$results = Group::with(['employees'])->where('group', '=', 'GreenGroup')->whereHas('employees', function($query){
$query->where('isTrained', '=', '0');
})->get();
return json_encode($results);
有没有办法排除querybuilder中的关系表条目?或者我是被迫(当我在我的站点上循环并显示它们时)编写逻辑来检查它们是否受过训练?
1条答案
按热度按时间ecr0jaav1#
您需要像我在下面提到的那样更改查询:
您提到的查询将始终返回所有成员,因为您在wherehas not in with中设置了条件。
您编写的查询主要用于获取具有非训练成员的所有组(为此,您需要删除where('group','=','greengroup')),但您需要相反的内容,因此需要在中设置条件。