我试图附加一个角色并以其角色返回用户:
# Attach role depending on input 'type'
$role = Input::get('type');
$user->assignRoleByName($role);
# Return response
return Response::json(array(
'user' => $user,
'roles' => $user->roles
));
奇怪的是,当我得到上述回复时,角色会包含在“用户”中。部分和'角色'部分(正如我想象的那样)。 然而,当我删除角色'部分,角色也从用户'中消失。栏目
我想要的是使用以下命令向用户返回角色:
# Return response
return Response::json(array(
'user' => $user
));
在我的User.php模型中:
public function roles()
{
return $this->belongsToMany('Role')->withTimestamps();
}
public function assignRoleByName($name)
{
$roles = Role::all();
foreach ($roles as $role)
{
if ($role->name == $name)
{
$this->roles()->attach($role);
}
}
}
透视表迁移:
Schema::create('role_user', function(Blueprint $table)
{
$table->increments('id');
$table->integer('role_id')->unsigned()->index();
$table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade');
$table->integer('user_id')->unsigned()->index();
$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
$table->timestamps();
});
我在这里做错了什么?
答案 0 :(得分:0)
尝试类似的事情,
$userId = 1; // find the user
$userWithRoles = $user->with('roles')->where('id' , '=', $userId)->get()->toArray(); // get all roles of the user with user details.
return Response::json(array(
'user' => $userWithRoles
));
不要忘记将2表与外键联系起来。
答案 1 :(得分:0)
您可以尝试此操作(使用load
):
# Return response
return Response::json(array(
'user' => $user->load('roles')
));
有关详情,请查看Lazy Eager Loading
中Eager Loading部分的Eloquent
。