从 laravel 中的多对多关系中获取单列
Get single column from many-to-many relationship in laravel
我在 User 模型和 Role 模型之间创建了多对多关系 table 'role_user'
.我想为经过身份验证的用户检索单个列 'role_name'
作为数组。
这是我的用户和角色模型配置:
User.php:
public function roles()
{
return $this->belongsToMany(Role::class);
}
Role.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
方法,但它 returns 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}}]}}
使用first()
函数获取单条记录
$user['role'] = $user->roles()->first()->role_name;
处理此类问题的一种简单而有效的方法是使用 API 资源。这样您就可以自定义来自控制器的 JSON 响应。
您可以在集合上使用 pluck
方法来执行此操作:
$user['role'] = $user->roles->pluck('name');
虽然您在访问 $user->roles
时加载了 roles
关系。虽然它没有显示在您当前的输出中。
此方法也适用于查询生成器。
$user['role'] = $user->roles()->pluck('name');
这不会加载关系。
Laravel 7.x Docs - Collections - Available Methods pluck
Laravel 7.x Docs - Queries - Retrieving Results - Retrieving A List Of Column Values pluck
我在 User 模型和 Role 模型之间创建了多对多关系 table 'role_user'
.我想为经过身份验证的用户检索单个列 'role_name'
作为数组。
这是我的用户和角色模型配置:
User.php:
public function roles()
{
return $this->belongsToMany(Role::class);
}
Role.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
方法,但它 returns 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}}]}}
使用first()
函数获取单条记录
$user['role'] = $user->roles()->first()->role_name;
处理此类问题的一种简单而有效的方法是使用 API 资源。这样您就可以自定义来自控制器的 JSON 响应。
您可以在集合上使用 pluck
方法来执行此操作:
$user['role'] = $user->roles->pluck('name');
虽然您在访问 $user->roles
时加载了 roles
关系。虽然它没有显示在您当前的输出中。
此方法也适用于查询生成器。
$user['role'] = $user->roles()->pluck('name');
这不会加载关系。
Laravel 7.x Docs - Collections - Available Methods pluck
Laravel 7.x Docs - Queries - Retrieving Results - Retrieving A List Of Column Values pluck