我试图返回一个包含一系列角色的$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
语句中返回呢?
答案 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
));