如何在 Laravel 查询生成器中转换 SQL 查询
how to convert SQL query in Laravel Query Builder
SQL查询是
SELECT
*,
(
SELECT COUNT(*)
FROM `users_data`
WHERE `users_data`.`role` = `user_role`.`role_id`
) AS `total_users`
FROM `user_role`
WHERE `user_role`.`role_type` = 'USER'
ORDER BY `user_role`.`role_order_by` ASC
在 SELECT
子句中使用 selectSub($query, $as)
作为子查询。
使用 selectRaw
或 DB::raw
在 SELECT
子句中使用聚合函数。
使用whereColumn($first, $second)
比较两列。
剩下的就很简单了。
$results = DB::query()
->select('*')
->selectSub(
function ($query) {
return $query->selectRaw('count(*)')
->from('users_data')
->whereColumn('users_data.role', 'user_role.role_id');
},
'total_users'
)
->from('user_role')
->where('user_role.role_type', 'USER')
->orderBy('user_role.role_order_by')
->get();
或
// subquery
$query = DB::query()
->selectRaw('count(*)')
->from('users_data')
->whereColumn('users_data.role', 'user_role.role_id');
$results = DB::query()
->select('*')
->selectSub($query, 'total_users')
->from('user_role')
->where('user_role.role_type', 'USER')
->orderBy('user_role.role_order_by')
->get();
SQL查询是
SELECT
*,
(
SELECT COUNT(*)
FROM `users_data`
WHERE `users_data`.`role` = `user_role`.`role_id`
) AS `total_users`
FROM `user_role`
WHERE `user_role`.`role_type` = 'USER'
ORDER BY `user_role`.`role_order_by` ASC
在 SELECT
子句中使用 selectSub($query, $as)
作为子查询。
使用 selectRaw
或 DB::raw
在 SELECT
子句中使用聚合函数。
使用whereColumn($first, $second)
比较两列。
剩下的就很简单了。
$results = DB::query()
->select('*')
->selectSub(
function ($query) {
return $query->selectRaw('count(*)')
->from('users_data')
->whereColumn('users_data.role', 'user_role.role_id');
},
'total_users'
)
->from('user_role')
->where('user_role.role_type', 'USER')
->orderBy('user_role.role_order_by')
->get();
或
// subquery
$query = DB::query()
->selectRaw('count(*)')
->from('users_data')
->whereColumn('users_data.role', 'user_role.role_id');
$results = DB::query()
->select('*')
->selectSub($query, 'total_users')
->from('user_role')
->where('user_role.role_type', 'USER')
->orderBy('user_role.role_order_by')
->get();