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')
));
有关详细信息,请查看 Eloquent
中 Eager Loading 部分的 Lazy Eager Loading
。
我正在尝试附加角色,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')
));
有关详细信息,请查看 Eloquent
中 Eager Loading 部分的 Lazy Eager Loading
。