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

Laravel, attaching related data to json response

我正在尝试附加角色,return 用户及其角色:

# Attach role depending on input 'type'
$role = Input::get('type');
$user->assignRoleByName($role);

# Return response
return Response::json(array(
    'user' => $user,
    'roles' => $user->roles
));

奇怪的是,当我有上述响应时,角色被包含在 'user' 部分 'roles' 部分(因为我会想象的)。 然而,当我删除 'roles' 部分时,角色也会从 'user' 部分消失

我想要的是return与用户的角色,使用:

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

}

和枢轴table迁移:

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

我做错了什么?

尝试类似的东西,

$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 table 与外键相关联。

您可以试试这个(使用 load):

# Return response
return Response::json(array(
    'user' => $user->load('roles')
));

有关详细信息,请查看 EloquentEager Loading 部分的 Lazy Eager Loading