mysql - Laravel where 和 orWhere 函数
问题描述
我正在计算我们的运营商在一周内(每天)关闭了多少张票我有这两个查询
$closedWeek = Ticket::join('activity_log', 'activity_log.rel_id', '=', 'ticket.id')
->where([
['activity_log.created_at', '>', $fri],
['activity_log.user_id', '=', $id],
['activity_log.event_name', '=', 'ticket_closed'],
['number', 'like', 'SD%']
])->count();
$closedWeek2 = Ticket::join('activity_log', 'activity_log.rel_id', '=', 'ticket.id')
->where([
['activity_log.created_at', '>', $fri],
['activity_log.user_id', '=', $id],
['number', 'like', 'SD%'],
['activity_log.event_name', '=', 'ticket_department_updated']
])
->where(function($query) {
$query->where('activity_log.new_value', '=', 'closed Uninvoiced')
->orWhere('activity_log.new_value', '=', 'To Invoice')
->orWhere('activity_log.new_value', '=', 'closed Other')
->orWhere('activity_log.new_value', '=', 'closed Invoiced');
})->count();
$closedWeek = $closedWeek + $closedWeek2;
他们带回的数字比预期的要大一些,我认为其中一些是重复的。如何使用 where(function($query)) 将它们放入一个查询中,还是必须使用 DB::raw 代替?然后我可以计算唯一 ID
解决方案
您可以GroupBy();
与 id 一起使用,
例子:
$closedWeek = Ticket::join('activity_log', 'activity_log.rel_id', '=', 'ticket.id')
->where([
['activity_log.created_at', '>', $fri],
['activity_log.user_id', '=', $id],
['activity_log.event_name', '=', 'ticket_closed'],
['number', 'like', 'SD%']
])
->groupBy('ticket.id')
->count();
$closedWeek2 = Ticket::join('activity_log', 'activity_log.rel_id', '=', 'ticket.id')
->where([
['activity_log.created_at', '>', $fri],
['activity_log.user_id', '=', $id],
['number', 'like', 'SD%'],
['activity_log.event_name', '=', 'ticket_department_updated']
])
->whereIn('activity_log.new_value',
[ 'closed Uninvoiced',
'To Invoice',
'closed Other',
'closed Invoiced',
])
->groupBy('ticket.id')
->count();
$closedWeek = $closedWeek + $closedWeek2;
OBS:
您不需要
'=',
相等的位置,例如,where('colun', '=', 'abc');
您可以更改为where('colun', 'abc');
请测试,看看你是否有预期的结果。
参考:
推荐阅读
- scala - 如何根据优先级验证规则验证 DataFrame Row?
- pandas - 熊猫中运行日期的填充
- java - 为什么java没有直接的内存管理工具?
- java - 在更深的嵌套项上使用 indexOn 的问题
- servicestack - 我必须将 ServiceStack 与 Kephas 集成在一起。如何让它们与依赖注入一起玩?
- c# - 如何在 C# 中按字母顺序打印字符串中出现的字符?
- flutter - 下载大文件时连接关闭
- colors - 750 只海龟的 Netlogo 随机数应在 40 滴答后变为红色
- python - 为什么 Docker 能够将文件保存到源目录?
- python - 无法从 NAS 读取文件