我需要使用数据库查询构建器将以下原始查询转换为Laravel查询的帮助。该查询必须使用DB(外观)查询构建器构建,而不是Eloquent。
SELECT distinct p.client_id
FROM people p
JOIN (SELECT client_id, COUNT(*)
FROM people
GROUP BY client_id
HAVING count(client_id) > 1 ) b
ON p.client_id = b.client_id
ORDER BY p.client_id')
到目前为止,这是我的解决方案:
$subQuery = DB::table('people')
->select('client_id', DB::raw('count(*)'))
->groupBy('client_id')
->havingRaw('count(client_id) > ?', [1]);
$mainQuery = DB::table('people')
->distinct('client_id')
->joinSub($subQuery, 'b', function ($join) {
$join->on('people.client_id', '=', 'b.client_id');
})
->orderBy('client_id')
->get();
答案 0 :(得分:1)
像这样尝试DB::raw()
:
DB::select(DB::raw("Your query here"));
DB::raw()
用于生成未解析的任意SQL命令 查询构建器可以进行任何进一步的处理。
答案 1 :(得分:1)
我找到了所需的解决方案:
$subQuery = DB::table('people')
->select('client_id', DB::raw('count(*)'))
->groupBy('client_id')
->havingRaw('count(client_id) > ?', [1]);
$peopleWithSameClient = DB::table('people')
->distinct('people.client_id')
->joinSub($subQuery, 'b', function ($join) {
$join->on('people.client_id', '=', 'b.client_id');
})
->orderBy('people.client_id')
->get();