我被 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)
合同(id,名稱,user_id)
角色(ID,名稱)
*** 更新 2 ***
如果運行雄辯
User::with('contracts', 'role')
->withCount('contracts')
->paginate(10);
它回傳帶有計數的所有 103。但是如何使用查詢構建器來做到這一點?
uj5u.com熱心網友回復:
您在 Laravel Query Builder中使用了直接JOIN(這相當于INNER JOINMySQL 的默認設定)。它不會考慮空合同或角色。你需要一個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- MySQL JOIN 與 LEFT JOIN 的差異
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/361086.html
上一篇:laravel8(errno:150"外鍵約束的格式不正確")
下一篇:SQL:根據多列的值排序
