无法返回附加了belongsToMany关系的对象

时间:2015-02-05 16:34:58

标签: laravel laravel-4 eloquent

我试图返回一个包含一系列角色的$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 Response::json(array(
    'users' => User::with('roles')->get()
));

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

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

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

然后它返回具有我期望角色的用户,那么为什么不在foreach语句中返回呢?

2 个答案:

答案 0 :(得分:2)

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

你可以

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

一个好的做法是混合Eloquent模型" style"使用直接数据库查询(User::...->get())查询(DB::table('user')...->get)。

答案 1 :(得分:1)

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