【问题标题】:Get single column from many-to-many relationship in laravel从laravel中的多对多关系中获取单列
【发布时间】:2023-04-09 14:04:01
【问题描述】:

我使用数据透视表 'role_user'User 模型和 Role 模型之间创建了多对多关系。我想为经过身份验证的用户检索单个列 'role_name' 作为数组。

这是我对用户和角色模型的配置:

用户.php:

public function roles()
{
    return $this->belongsToMany(Role::class);
}

角色.php:

public function users()
{
    return $this->belongsToMany(User::class);
}

AuthController.php:

public function details()
{
    $user = Auth::user();
    $user['role'] = $user->roles;
    return response()->json(['success' => $user], 20);
}

laravel 响应如下:

{"user":{"id":4,"first_name":"Jill","last_name":"mclane","email":"jill@g.co","role":[{"id":1,"role_name":"vendor","pivot":{"user_id":4,"role_id":1}}]}}

我想获取role_name 列作为选定用户的数组。例如。 role:['vendor','admin']。我使用了select 方法,但它返回pivot 以及其他列:

$user['role'] = $user->roles()->select('role_name')->get();
//returns {"user":{"id":4,"first_name":"Jill","last_name":"mclane","email":"jill@g.co","role":[{"role_name":"vendor","pivot":{"user_id":4,"role_id":1}}]}}

【问题讨论】:

    标签: php laravel eloquent many-to-many


    【解决方案1】:

    您可以使用集合上的pluck 方法来执行此操作:

    $user['role'] = $user->roles->pluck('name');
    

    您在访问$user->roles 时已经加载了roles 关系。虽然它没有显示在您当前的输出中。

    查询生成器也存在此方法。

    $user['role'] = $user->roles()->pluck('name');
    

    这不会加载关系。

    Laravel 7.x Docs - Collections - Available Methodspluck

    Laravel 7.x Docs - Queries - Retrieving Results - Retrieving A List Of Column Valuespluck

    【讨论】:

      【解决方案2】:

      使用 API 资源是解决此类问题的一种简单而有效的方法。这样您就可以自定义来自控制器的 JSON 响应。

      见:https://laravel.com/docs/7.x/eloquent-resources

      【讨论】:

        【解决方案3】:

        使用first()函数获取单条记录

        $user['role'] = $user->roles()->first()->role_name;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-04-29
          • 2019-05-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-20
          • 2021-05-04
          相关资源
          最近更新 更多