我的SQL查询是
$q = "SELECT
file,
roleId,
page,
type,
userType,
COUNT(DISTINCT($a)) as 'a',
COUNT(DISTINCT($b)) as 'b'
FROM table_name
WHERE
course IN ($type)
AND date BETWEEN '$startDate' AND '$endDate'
AND (course_1 is NULL OR course_1 NOT IN ('ABCD'))
AND deleted IS NULL
AND type LIKE '%Professor%'
AND action = 'submit'
GROUP BY file, roleId";
我想将该查询转换为laravel查询生成器,例如
$orders = DB::table('table_name')
->select('file', 'roleId', 'page', 'type', userType DB::raw('COUNT(DISTINCT(($a)) as 'a'))
->groupBy('file', 'roleId')
->get();
了解如何将其他COUNT添加到其中以及如何以及在何处链接-> where()? 有人可以帮忙建立这个吗?
答案 0 :(得分:0)
<?php
$orders = DB::table('table_name')
->whereIn('course', $courseTypes)
->whereBetween('date', [$startDate, $endDate])
->where(function($q){
return $q->whereNull('course_1')
->orWhereNotIn('course_1', $courseArrayToFilter);
})
->whereNull('deleted')
->where('type', 'like', '%Professor%')
->where('action', 'submit')
->groupBy('file', 'roleId')
->select(
'file',
'roleId',
'page',
'type',
'userType',
\DB::raw("COUNT(DISTINCT($a)) as a"),
\DB::raw("COUNT(DISTINCT($b) as b")
)
->get();
答案 1 :(得分:0)
也许以最干净的方式做到这一点:
DB
门面的情况下使用Model实例whereRaw
传递复杂或纯SQL查询selectRaw()
处理诸如COUNT
之类的实例函数的纯SQL查询WHERE
模拟AND
运算符whereIn
过滤数据范围GROUP BY
SELECT
中的所有列这时您遇到了错误,我的意思是您的查询有误 代码
$data = Model::select('file', 'roleId', 'page', 'type', 'userType')
->selectRaw('COUNT(DISTINCT($a)) as a')
->selectRaw('COUNT(DISTINCT($b)) as b')
->whereRaw('type IN $type')
->whereIn('date', [$startDate, $endDate])
->whereRaw("course_1 IS NULL OR course_1 NOT IN('ABCD')")
->whereNull('deleted')
->where('type', 'LIKE', "%".'Professor'."%")
->where('action', '=', 'submit')
->groupBy('file', 'roleId', 'page', 'type', 'userType')
->get();