首页 > 解决方案 > 如何在 Join 中获取 Laravel Eloquent Count 和 Case

问题描述

再会!

我在我的 laravel 8 项目中尝试查询时遇到问题。在我的数据库中,我有 2 个表:用户和角色。在用户表中,它有一个角色列,该列中插入的数据是角色表ID。

或者任何人都可以帮我将此sql命令转换为laravel。

----SQL----

SELECT roles.id, roles.role_name, 
    COUNT(users.roles) AS users, 
    roles.permission,
    case when roles.`status` = 1 then 'Active'
    ELSE 'Inactive' 
    END AS `status`
FROM roles
    INNER JOIN users ON roles.id = users.roles 
GROUP BY roles.id

--我的 laravel 代码不工作--

$data = Roles::select(
        "roles.id",
        "roles.role_name",
        DB::raw("count(users.roles) as users, roles.permission, (CASE WHEN roles.status = 1 THEN 'Active' ELSE 'Inactive' END) as status")
    )
    ->join("users", "users.roles","=","roles.id")
    ->groupBy("roles.id")
    ->get();

来人帮帮我。谢谢

标签: sqllaraveleloquent

解决方案


    DB::table("roles")
->innerJoin("users", function($join){
    $join->on("roles.id", "=", "users.roles");
})
->select("roles.id", "roles.role_name", "count (users.roles) as users", "roles.permission")
->addSelect(DB::raw("case when roles.`status` = 1 then 'active' else 'inactive' end as `status`"))
->groupBy("roles")
->get();

推荐阅读