Laravel集合-对象的返回数组

Sol*_*ine 3 arrays collections rest json laravel

因此,我尝试使用以下代码使用Laravel集合返回对象数组:

/**
 * View a user's chat rooms.
 *
 * return \Illuminate\Http\Response|\Laravel\Lumen\Http\ResponseFactory\
 */
public function viewChatRooms()
{
    $user = Auth::user(); // @var User $user
    $username = $user->username;

    $rooms = Room::with('messages')->get()
                    ->filter(function ($val) use ($username){
                        foreach ($val->users as $user) {
                            if($user === $username){
                                return $val;
                            }
                        }
    });

    return response(['rooms' => $rooms]);
}
Run Code Online (Sandbox Code Playgroud)

响应不返回对象数组,而是返回以下内容:

{
    "rooms": {
        "0": {...},
        "3": {...}
    }
}
Run Code Online (Sandbox Code Playgroud)

这是期望的结果:

{
    "rooms": [
        {...},
        {...}
    ]
}
Run Code Online (Sandbox Code Playgroud)

有点受此困扰,有人可以引导我朝正确的方向发展吗?

Pri*_*lar 5

返回如下所示的响应时,可以使用PHP的array_value函数:

return response()->json([
    'rooms' => array_values($rooms->toArray())
]);
Run Code Online (Sandbox Code Playgroud)

Laravel只能获取Collection值的Collection方法

https://laravel.com/docs/5.8/collections#method-values

所以

return response()->json([
    'rooms' => $rooms->values()->toArray()
]);
Run Code Online (Sandbox Code Playgroud)