我想我已经明白了,现在 Laravel 不提供参数化对我来说是有道理的groupBy
.
首先,我需要回顾一下MySql 分组依据 https://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html.
您中提到的每个字段select
需要与您放入的内容兼容groupBy
.
你可以使用:->groupBy(DB::raw('some_alias'))
就我而言:
$statsQuery = DB::table('contacts')
->selectRaw("SUBSTR(DAYNAME(CONVERT_TZ(created_at, 'UTC', ?)), 1, 3) AS 'DayOfWeek', HOUR(CONVERT_TZ(created_at, 'UTC', ?)) AS 'Hour', COUNT(id) AS 'CallsScheduled'", [$reportingClientTimeZone, $reportingClientTimeZone])
->whereIn('adId', $adIds)
->whereRaw("CONVERT_TZ(created_at, 'UTC', ?) >= STR_TO_DATE(?, '%Y-%m-%d')", [$reportingClientTimeZone, $startDate]) //https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_convert-tz
->whereRaw("CONVERT_TZ(created_at, 'UTC', ?) < DATE_ADD(STR_TO_DATE(?, '%Y-%m-%d'), INTERVAL 1 day)", [$reportingClientTimeZone, $endDate]) //Given a certain endDate (which begins at midnight), only include results LESS THAN 1 day after that midnight
->whereNotNull('clarityCallTimeUtc')
->groupBy(DB::raw("DayOfWeek, Hour"));
See how COUNT()
是我唯一的聚合函数吗?我的文章中唯一提到的其他领域select
是我在中使用的(别名)groupBy
.
我认为这对我有用。