Laravel : Select 电子邮件列基于用户角色 (Eloquent)

Laravel : Select email column based on user role (Eloquent)

$users = User::select('users.id', 'users.username', 'users.active', 'users.parent_id', 'parent.username as parent_username')
->selectRaw('users.email as primary_email')
->selectRaw('user_profiles.secondary_email as secondary_email');

目前我正在从用户和 user_profiles table 中获取所有用户 主要电子邮件 & 辅助电子邮件 两个单独的列,用于在前端显示用户列表。

如果用户角色具有 'admin',如何仅创建一个包含主要电子邮件的列 email 来改进此查询,否则它包含 secondary_email 对于除 admin

之外的所有其他用户

我的 Table 结构:角色 Table、用户角色 Table、用户 Table (使用 spatie laravel 权限)

您需要根据您的要求修改以下查询:

$users = User::select("*",
                \DB::raw('(CASE 
                    WHEN users.status = "0" THEN "User" 
                    WHEN users.status = "1" THEN "Admin" 
                    ELSE "SuperAdmin" 
                    END) AS status_lable'))
            ->get();
dd($users);

通过这种方式,您可以return 根据用户角色选择主要和次要电子邮件地址。

我正在尝试 select 基于用户角色的电子邮件列 (Eloquent)

我的用户模型有一个 role_id 并且有三个角色 1,2,3。我有另一个名为 table 的电子邮件,其中包含 emails.role_id、emails.email

现在我需要根据他们的 role_id 在我的用户索引视图中显示电子邮件,就像如果我以管理员身份登录我应该得到所有用户的电子邮件或者如果我以家长身份登录我应该只得到父用户的电子邮件

这是下面提供的查询的修改版本

$users = User::select('users.id', 'users.username', 'users.active', 'users.parent_id', 'parent.username as parent_username')
            ->selectRaw("CASE WHEN GROUP_CONCAT(roles.name) = 'student' THEN user_profiles.secondary_email ELSE users.email END as email")