mysql - Laravel:如果关系计数有某些条件,则获取模型
问题描述
我有用户和用户投诉模型。我喜欢检索在过去 24 小时内用户投诉次数超过 2 次的用户。
users:
id
user_complains:
complained_id ->ref-> users.id
created_at
这是我尝试过的,它正在工作:
$users = User::select('users.*')->join('user_complains' , 'users.id' , '=' , 'user_complains.complained_id')
->whereRaw("(
select count(*) from `user_complains`
where `user_complains`.`complained_id` = `users`.`id`
and `user_complains`.`created_at` > ?) >= ?" , [now()->subHours(24), 2])
->groupBy("users.id")
->get();
上面的代码很好并且正在工作,但我想知道有没有更好的方法来做到这一点?!
解决方案
对于这样的事情,您可以使用whereHas()。:
$users = User::whereHas('*relationship*', function ($query) {
$query->where('created_at', '>=', now()->subDay(1));
}, '>', 2)->get();
如文档中所述,您可以将附加检查作为第 3 和第 4 参数传递,因此在这种情况下,您想说明用户在哪里拥有超过 2 的参数user_complains
。
NB您将需要替换*relationship*
为关系的实际名称。
推荐阅读
- python - 有没有办法一次运行多次事务?
- java - 字符串和扫描仪输入之间的逻辑语句不起作用
- java - 如何仅在 Recylerview 中更改最后一项的背景
- python - 从标签python列表创建关联矩阵的快速方法?
- coq - 具有动态依赖关系的细粒度构建?
- android - Kotlin - 为什么我会在 moveCamera for Google Map 获得 KotlinNullPointerException
- node.js - 使用 CORS 策略的 Sails、React 和 Axios 错误:请求的资源上不存在“Access-Control-Allow-Origin”标头
- python - wxPython 出错 - 部分初始化的模块“wx”没有属性“框架”(很可能是由于循环导入)
- node.js - 如何让我的消息收集器监听提到的用户 Discord.js v12 发送的消息
- json - 在插入 pymongo 之前解析日期