如何在 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) 作为子查询。

使用 selectRawDB::rawSELECT 子句中使用聚合函数。

使用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();