'Laravel Multiple Filtering

I want to get multiple categories data but I can't. when i was use this query without foreach I get only one row

My Query

    $category=$request->category;
    $rating=$request->rating;
    $level=$request->level;

    $cats=Str::of($category)->explode(',');
    
    $filters=Book::when($cats, function($query,$cats){   
        foreach($cats as $cat)
        {
            $query->where('catid',$cat); 
        }
            
    })
    ->when($rating, function($query,$rating){
        $query->where('rate_avg','>=',$rating);
    })
    ->when($level, function($query,$level){
        $query->where('levelid',$level);
    })
    ->get();

    return response()->json($filters);

Input= api/get?category=1,2&rating=2

Output (catid 2 did not come)

{
  "id": 3,
  "bname": "Book 3",
  "bwriter": "Author 3",
  "catid": 1,
  "levelid": 3,
  "book_length": 234,
  "summary": "Summary 3",
  "rate_avg": "3.00",
  "created_at": "2022-02-12T13:09:31.000000Z",
  "updated_at": "2022-02-12T13:18:26.000000Z"
}


Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source