【问题标题】:How to show comma separated values of roles using Laravel如何使用 Laravel 显示角色的逗号分隔值
【发布时间】:2019-12-02 19:22:03
【问题描述】:

一个用户可以有多个角色,我想以逗号分隔的值显示我的角色,例如

"role": "world","hello","john"

但目前我正在针对每个用户获取角色,这会在我的列表中创建重复用户,因为一个用户可以拥有多个角色。如果我对一个用户有 5 个角色,它将针对一个用户创建 5 个列表,并且在获取时会有用户电子邮件和 id 重复,我想避免:

这是我的控制器代码:

public function getAllUsers()
{
    $users = DB::table('users')
        ->leftjoin('user_basic_info', 'users.id', '=', 'user_basic_info.user_id')
        ->leftjoin('roles', 'users.id', '=', 'roles.created_by')
        ->select('users.id', 'user_basic_info.*','roles.name AS role','users.email', 'users.created_at', 'users.updated_at','users.created_by')
        ->where('users.deletedAt', '=', null)
        ->where('roles.deletedAt', '=', null)
        ->orderBy('users.id', 'desc')->get();

    return response([
        'status' => true,
        'message' => "All Users",
        'total' => count($users),
        'data' => $users
    ], 200);
}

我可以用 eloquent 做到这一点,但我的反应会改变。目前我正在收到回复:

    {
        "id": 14,
        "first_name": "farhan",
        "middle_name": "ahmed",
        "role": "world",
        "email": "shahzad_h12495@ovadamd.com"
    },
    {                           {
        "id": 14,
        "first_name": "farhan",
        "middle_name": "ahmed",
        "role": "hello",
        "email": "shahzad_h12495@ovadamd.com"
    },

您可以看到电子邮件和 id 重复,我想要一条针对 id 14 的记录,并以逗号分隔,如下所示:

        "id": 14,
        "first_name": "farhan",
        "middle_name": "ahmed",
        "role": "hello","world",
        "email": "shahzad_h12495@ovadamd.com"

如何使用查询架构实现这一点?

【问题讨论】:

  • 您能否检查一下该响应,因为它看起来对我无效。你真的得到回应了吗
  • 是的,我收到了回复
  • 忽略名字和姓氏相同的值,但我得到的响应正是我是共享的
  • 显示对 jsonlint.com 的响应 你和我一样收到错误吗?
  • 我分享了屏幕截图,兄弟我刚刚向你展示了 2 个对象,我的 json 中有 40 多条记录

标签: php json laravel query-builder


【解决方案1】:

重复只能在两种情况下忽略:

  • 您使用 Eloquent 并调用角色作为关系
  • 您在 foreach 中处理数据并手动组织事物。

show question是Front issue而不是Back issue,如果你使用刀片和角色作为关系,你可以这样做

    @foreach($user->roles as $role) 
        @if(!$loop->last) , @endif // 
        {{ $role->name }} 
    @endforeach

如果您使用 Laravel 模型,使用 Eloquent 处理您的查询将轻松一百万倍:

User::with('roles)->->orderBy('users.id', 'desc')->get();

如你所见,不需要加入,因为 Eloquent 会这样做,也不需要 delete_At == null 因为 Eloquent 只会抓取那些没有 deleted_At 的。

【讨论】:

    猜你喜欢
    • 2020-05-21
    • 2013-05-31
    • 2022-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-31
    • 1970-01-01
    • 2011-06-13
    • 2023-03-18
    相关资源
    最近更新 更多