laravel-5 - Laravel whereIn() 的作用类似于 orWhereIn()
问题描述
有3张表:
- 膳食
- 标签
- 餐标签
我想从 url 查询中获取所有包含所有标签的餐点。
例如:.../api/query?tags=1,2,3
在这个例子中,我想获取所有有
标签1 AND标签2 AND标签3
,但我的查询返回有
标签 1或标签2或标签 3
这是我的查询:
$query = Meal::query();
...
if ($request->has('tags')) {
$inputTags = $request->query('tags');
$tags = explode(',', $inputTags);
$query = $query->whereHas('tags', function($q) use ($tags) {
$q->whereIn('tags.id', $tags);
});
}
解决方案
IN()
检查一个值是否在一组值内,对于任何匹配的值然后返回 true,它不会验证所有值是否存在,
为了实现您正在尝试的内容,您需要单独检查每个标签 ID whereHas
,以确保所有这些都存在
if ($request->has('tags')) {
$inputTags = $request->query('tags');
$tags = explode(',', $inputTags);
foreach($tags as $tag){
$query = $query->whereHas('tags', function($q) use ($tag) {
$q->where('id','=', $tag);
});
}
}
推荐阅读
- javascript - 遍历 JavaScript 数组并动态查找深层嵌套值
- ruby-on-rails - 在 Rails 中应用输入掩码
- javascript - Node JS Post 以简单的形式不断加载而不是重定向
- node.js - 为什么 Sequelize 的 save() 不保存我推送到 JSON 的更改,而是保存其他所有内容?
- python - 将 3D numpy 数组转换为 2D 并返回
- adobe - 尝试在 Adobe PDF 中显示下拉菜单选择的导出值
- python - 如何为 VS Code 设置 lauch.json 以便我可以使用当前工作目录中的其他文件夹/文件?
- python - 神经网络输出的两个错误
- python - 使用 Gensim 提取主题
- python - 你能解释一下 callfun.counter 是局部变量还是全局变量????#如果local是什么范围呢?