Laravel,将相关数据附加到json响应

时间:2015-01-30 10:35:39

标签: laravel laravel-4

我试图附加一个角色并以其角色返回用户:

# 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();
});

我在这里做错了什么?

2 个答案:

答案 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 LoadingEager Loading部分的Eloquent