laravel 查询构建器计数关系
laravel query builder count relationship
我被 laravel 8
中的查询生成器卡住了
DB::table('users')
->join('contracts', 'users.id', '=', 'contracts.user_id')
->join('roles', 'roles.id', '=', 'users.role_id')
->select('users.id', 'users.username', 'users.email', DB::raw('COUNT(contracts.user_id) as numberOfContracts'))
->groupBy('users.id')
->paginate(10);
我只有 80 个条目....我有 103 个用户。
当然,我想显示所有使用分页的用户.....并显示每个用户的角色和合同数量。
我做错了什么?
*** 更新 ***
表格如下:
用户(id、用户名、电子邮件,role_id)
合同(身份证,姓名,user_id)
角色(id,名字)
*** 更新 2 ***
如果运行 eloquent
User::with('contracts', 'role')
->withCount('contracts')
->paginate(10);
它 return 所有 103 与计数。但是如何使用查询生成器来实现呢?
您在 Laravel 查询生成器中直接使用 JOIN
(等同于 INNER JOIN
,因为这是 MySQL 默认设置)。它不会考虑空合同或角色。您需要 LEFT JOIN
才能执行此操作。
DB::table('users')
->leftJoin('contracts', 'users.id', '=', 'contracts.user_id')
->leftJoin('roles', 'roles.id', '=', 'users.role_id')
->select('users.id', 'users.username', 'users.email', DB::raw('COUNT(contracts.user_id) as numberOfContracts'))
->groupBy('users.id')
->paginate(10);
查看此 SO 问题以查看 JOINS
中的差异 -- Difference in MySQL JOIN vs LEFT JOIN
我被 laravel 8
中的查询生成器卡住了DB::table('users')
->join('contracts', 'users.id', '=', 'contracts.user_id')
->join('roles', 'roles.id', '=', 'users.role_id')
->select('users.id', 'users.username', 'users.email', DB::raw('COUNT(contracts.user_id) as numberOfContracts'))
->groupBy('users.id')
->paginate(10);
我只有 80 个条目....我有 103 个用户。
当然,我想显示所有使用分页的用户.....并显示每个用户的角色和合同数量。
我做错了什么?
*** 更新 ***
表格如下:
用户(id、用户名、电子邮件,role_id)
合同(身份证,姓名,user_id)
角色(id,名字)
*** 更新 2 ***
如果运行 eloquent
User::with('contracts', 'role')
->withCount('contracts')
->paginate(10);
它 return 所有 103 与计数。但是如何使用查询生成器来实现呢?
您在 Laravel 查询生成器中直接使用 JOIN
(等同于 INNER JOIN
,因为这是 MySQL 默认设置)。它不会考虑空合同或角色。您需要 LEFT JOIN
才能执行此操作。
DB::table('users')
->leftJoin('contracts', 'users.id', '=', 'contracts.user_id')
->leftJoin('roles', 'roles.id', '=', 'users.role_id')
->select('users.id', 'users.username', 'users.email', DB::raw('COUNT(contracts.user_id) as numberOfContracts'))
->groupBy('users.id')
->paginate(10);
查看此 SO 问题以查看 JOINS
中的差异 -- Difference in MySQL JOIN vs LEFT JOIN