Return 使用 laravel 中的 php 的多对多关系中的特定列
Return a specific column from a many-many relationship using php in laravel
在我的数据库中,我有两个模型,用户和角色定义为多对多关系,我试图在 laravel 中编写代码,从角色 table 中获取 id 和从用户 table 获取所有用户全名。
我定义了一条如下所示的路线:
Route::get('roleUser/{role}', 'RoleController@RoleNames');
如上所示,我在其中传递了角色名称
在我的 RoleController 中,我定义了方法 roleNames 来完成这项工作
public function RoleNames($role)
{
$idrole = Role::where('name', '=', $role)->first()->id;
//$iduser = DB::table('assigned_roles')->where('role_id', '=', $idrole)->first()->id;
$iduser = DB::table('assigned_roles')->where('role_id', '=', $idrole)->get(array('id'));
$usersUnderRole = array();
foreach ($iduser as $idusers) {
$usersUnderRole = array_add($usersUnderRole, $idrole, $idusers);
$full_name = DB::table('users')->where('id', '=', $idusers)->get()->full_name;
}
return $this->respond([
'result' => $this -> roleTransformer->transform($full_name)
]);
}
此代码旨在从 roles
table 中获取 role_id
并通过枢轴 table [=32= 获取适当的 user_ids
], 将它们放在一个数组中并获取对应的 full_names
,但它显示此错误:
- Object of class stdClass could not be converted to string
关于如何让它工作有什么建议吗?
这将为您提供属于给定角色的所有用户:
$role_id = 3;
$result = DB::table('role_user')
->select('users.full_name')
->where('role_user.role_id', $role_id)
->leftJoin('users', 'users.id', '=', 'role_user.user_id')
->get();
var_dump($result);
$full_names = DB::table('users')->where('id', '=', $idusers)->lists('users.full_name' );
除了@lamzazo 提供的解决方案外,还有另一种解决方法:
$role2 = Role::where('name', '=', $role)->first();
$idrole = Role::where('name', '=', $role)->first()->id;
//$iduser = DB::table('assigned_roles')->where('role_id', '=', $idrole);
$user = DB::table('assigned_roles')->where('role_id', '=', $idrole)->get();
// $user = DB::table('users')->where('id', '=', $iduser);
// return $this->respond($iduser[0]->user_id);
$userArray = array();
$i=0;
foreach ($user as $users) {
$iduser= $users->user_id;
$allusers = User::where('id', '=', $iduser)->get(array('id', 'full_name'));
$userArray = array_add($userArray, $i . '', $allusers);
$i++;
}
return $this->respond([
'result' => $this -> roleTransformer->testTransform($role2, $userArray)
]);
在我的数据库中,我有两个模型,用户和角色定义为多对多关系,我试图在 laravel 中编写代码,从角色 table 中获取 id 和从用户 table 获取所有用户全名。
我定义了一条如下所示的路线:
Route::get('roleUser/{role}', 'RoleController@RoleNames');
如上所示,我在其中传递了角色名称
在我的 RoleController 中,我定义了方法 roleNames 来完成这项工作
public function RoleNames($role)
{
$idrole = Role::where('name', '=', $role)->first()->id;
//$iduser = DB::table('assigned_roles')->where('role_id', '=', $idrole)->first()->id;
$iduser = DB::table('assigned_roles')->where('role_id', '=', $idrole)->get(array('id'));
$usersUnderRole = array();
foreach ($iduser as $idusers) {
$usersUnderRole = array_add($usersUnderRole, $idrole, $idusers);
$full_name = DB::table('users')->where('id', '=', $idusers)->get()->full_name;
}
return $this->respond([
'result' => $this -> roleTransformer->transform($full_name)
]);
}
此代码旨在从 roles
table 中获取 role_id
并通过枢轴 table [=32= 获取适当的 user_ids
], 将它们放在一个数组中并获取对应的 full_names
,但它显示此错误:
- Object of class stdClass could not be converted to string
关于如何让它工作有什么建议吗?
这将为您提供属于给定角色的所有用户:
$role_id = 3;
$result = DB::table('role_user')
->select('users.full_name')
->where('role_user.role_id', $role_id)
->leftJoin('users', 'users.id', '=', 'role_user.user_id')
->get();
var_dump($result);
$full_names = DB::table('users')->where('id', '=', $idusers)->lists('users.full_name' );
除了@lamzazo 提供的解决方案外,还有另一种解决方法:
$role2 = Role::where('name', '=', $role)->first();
$idrole = Role::where('name', '=', $role)->first()->id;
//$iduser = DB::table('assigned_roles')->where('role_id', '=', $idrole);
$user = DB::table('assigned_roles')->where('role_id', '=', $idrole)->get();
// $user = DB::table('users')->where('id', '=', $iduser);
// return $this->respond($iduser[0]->user_id);
$userArray = array();
$i=0;
foreach ($user as $users) {
$iduser= $users->user_id;
$allusers = User::where('id', '=', $iduser)->get(array('id', 'full_name'));
$userArray = array_add($userArray, $i . '', $allusers);
$i++;
}
return $this->respond([
'result' => $this -> roleTransformer->testTransform($role2, $userArray)
]);