不能 return 对象附加 belongsToMany 关系

Can't return object with belongsToMany relationship attached

我正在尝试 return 包含一系列角色的 $users 列表。

这是我的控制器:

    $users = DB::table('users')->take(5)->skip(2)->get();

    foreach ($users as $user)
    {
        $user = User::with('roles')->find($user->id);
    }

    return Response::json(array(
        'users' => $users
    ));

模型关系如下:

public function roles()
{
    return $this->belongsToMany('Role')->withTimestamps();
}

但这只是 return 没有附加角色的用户。但是,如果我这样做:

return Response::json(array(
    'users' => User::with('roles')->get()
));

我得到了每个用户的角色的完整列表。那么,我做错了什么?

奇怪的是,如果我这样做:

return Response::json(array(
    'users' => User::with('roles')->find($user->id)
));

然后 return 那个用户具有我预期的角色,那么为什么不 return 在 foreach 语句中呢?

foreach 使用按值传递。这意味着您不会更改实际的数组项,而只是更改值的副本。要更改它并让项目 通过引用 添加 &:

foreach ($users as &$user) {
    $user = User::with('roles')->find($user->id);
}

但是你为什么不这样做呢?

$users = User::with('roles')->take(5)->skip(2)->get();
return Response::json(array(
    'users' => $users
));

使用 DB 查询时,您将失去整个 Eloquent 关系功能。

你可以

$users = User::with('roles')->take(5)->skip(2)->get();

一个好的做法是不要将Eloquent模型"style"查询(User::...->get())与直接数据库查询(DB::table('user')...->get).