laravel - 根据与 Laravel 的关系使用 where
问题描述
我正在尝试根据with()
关系过滤用户。通过过滤器,我的意思是根本不返回该用户。
User::with('info');
这适用于返回“信息”关系。
现在我想查询基于。
where('info.allowance', null);
如果我试试这个:
User::with(['info' => function($q) {
return $q->where('allowance', '>', 0);
})
...它返回所有用户,但只返回允许 > 0 的用户的“信息”模型。这不是我想要的。
我想要的:只返回允许 > 0 的用户。
解决方案
您正在寻找whereHas()
方法:
User::with(['info' => function($q) {
return $q->where('allowance', '>', 0);
})->whereHas('info', function($q) {
return $q->where('allowance', '>', 0);
})->get();
->with()
用于急切加载,因此每个实例都$user->info
将被限制为传递的逻辑,但->whereHas()
会限制原始查询,因此它将仅返回User
与给定逻辑匹配的记录。
旁注,您对两者使用相同的子句看起来很奇怪,但您可以(并且在这种情况下应该)。
推荐阅读
- javascript - Buefy 表后端排序似乎不起作用
- php - 如何使用 Javascript 从 URL 访问 JSON 并将数据提取到刀片中
- objective-c - Objective-C 相当于 Swift "\(variable)"
- sqlite - 如何使用 SQlite 在 QTableView 上声明负数
- reactjs - 在 es6 中计算内部地图
- javascript - 在“reactstrap”导航栏中使用“折叠”时“无法将未定义或空值转换为对象”
- python - 如何根据值更改条形图的颜色?
- c# - DateTime.ParseExact 无法按预期工作
- excel - 为什么 VBA 不允许我在用户窗体的命令按钮中声明公共数组?
- mongodb - 如何在 mongodb 中像 SQL 一样编写 sum(if a>=10 and a<=100,a,0)