Laravel Group By Inconsistent response format

Viewed 28

Currently I am developing an employee management system that has functionality to store a users goals (targets).

Whenever the data is returned, depending on which user, the data JSON format is inconsistent and therefore I cannot properly display this on the front end.

The controller code is

    public function index(Request $request){
        $user = $request->user();
        if($request->query('user')){
           $user = User::find($request->query('user'));
           $goals = $user->goals->groupBy('status');
           return response()->json($goals, 200);
        }
        $goals = $user->goals->groupBy('status');
        if(!$goals){
            return response()->json([
                "Message" => "No goals found."
            ], 404);
        }
        return response()->json($goals, 200);
    }

With the goals relationship defined on the user model:

    public function goals(){
        return $this->hasMany(Goal::class, 'user_id');
    }

When I request for example user with ID 25s goals I get this response (the format I want).

[
    [
        {
            "id": 22,
            "user_id": 25,
            "title": "Quia quibusdam nisi aperiam harum.",
            "description": "Molestiae molestiae recusandae animi harum dolores quia. Et et voluptatum ea sunt dolor. Perferendis atque veniam totam quidem occaecati officiis expedita. Eum delectus a impedit.",
            "progress": "20.74",
            "status": 0,
            "target_date": "2007-08-21",
            "created_at": "2022-03-28T16:14:35.000000Z",
            "updated_at": "2022-03-28T16:14:35.000000Z"
        },
        {
            "id": 23,
            "user_id": 25,
            "title": "Quis tempora enim quo id.",
            "description": "Nobis sed iste quia et sit facere sit. Et atque recusandae perspiciatis quod aspernatur minus. Minima illo doloremque et animi. Est ea autem soluta. Ut iusto dolor autem non. Veniam fugiat est dolorem fugiat laudantium explicabo.",
            "progress": "19.48",
            "status": 0,
            "target_date": "2010-12-22",
            "created_at": "2022-03-28T16:14:35.000000Z",
            "updated_at": "2022-03-28T16:14:35.000000Z"
        }
    ],
    [
        {
            "id": 61,
            "user_id": 25,
            "title": "Officiis ut in vitae minus.",
            "description": "Magni quis sint eaque quod. Modi soluta asperiores ipsum nobis praesentium. Suscipit asperiores vero doloribus iure. Hic possimus vel asperiores temporibus quo ea.",
            "progress": "63.42",
            "status": 1,
            "target_date": "2016-01-27",
            "created_at": "2022-03-28T16:14:35.000000Z",
            "updated_at": "2022-03-28T16:14:35.000000Z"
        }
    ]
]

However, When i request user with ID 26 for example, this is returned.

{
    "2": [
        {
            "id": 29,
            "user_id": 26,
            "title": "Labore placeat voluptatum et voluptatem.",
            "description": "Labore incidunt consequatur ab cupiditate ducimus distinctio aut. Laboriosam neque et odio nostrum ab voluptas et. In vero mollitia suscipit porro harum magni consequatur. Omnis nisi natus harum odio nostrum.",
            "progress": "6.38",
            "status": 2,
            "target_date": "1986-01-25",
            "created_at": "2022-03-28T16:14:35.000000Z",
            "updated_at": "2022-03-28T16:14:35.000000Z"
        }
    ],
    "1": [
        {
            "id": 44,
            "user_id": 26,
            "title": "Dicta est suscipit in sapiente sed architecto.",
            "description": "Aperiam ab dolorum ut id voluptate. Autem earum eum recusandae quaerat repellat officiis. Quo provident corporis doloribus qui molestias. Sunt non modi facilis numquam optio officia ea.",
            "progress": "79.49",
            "status": 1,
            "target_date": "2018-04-28",
            "created_at": "2022-03-28T16:14:35.000000Z",
            "updated_at": "2022-03-28T16:14:35.000000Z"
        }
    ]
}

Any help with this is appreciated.

1 Answers

Fixed the issue using laravels values() function

return response()->json($goals->values(), 200);
Related