代码之家  ›  专栏  ›  技术社区  ›  calin24

laravel查询生成器计数关系

  •  0
  • calin24  · 技术社区  · 4 年前

    我在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);
    

    我做错了什么?

    ***更新***

    这些表格如下:

    合同(id、名称、用户id)

    角色(id、名称)

    ***更新2***

    User::with('contracts', 'role')
    ->withCount('contracts')
    ->paginate(10);
    

    它返回所有带计数的103。但是如何使用查询生成器呢?

    1 回复  |  直到 4 年前
        1
  •  1
  •   Zak    4 年前

    你用的是直的 JOIN (相当于 INNER JOIN 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);
    

    JOINS -- Difference in MySQL JOIN vs LEFT JOIN