Dominykas Česonis
Dominykas Česonis

Reputation: 43

Laravel/Lumen api filter

recently I'am trying to make my api filtering work. I need to filter my products like this: http://localhost/search?feature_id=1,2,3,4,5...
Everything is fine if I'm sending only 1 id. But how to make it work in this way?

This is my controller:

 public function search2(\Illuminate\Http\Request $request) {
        $query = DB::table('tlt_product_features'); 

        if ($request->has('feature_id') ) {
            $query = $query->whereIn('feature_id', [$request->get('feature_id')]);
        }

        $products = $query->get();

        return response()->json([
            'products' =>$products
        ]);
    } 

Upvotes: 2

Views: 2048

Answers (2)

Quentin Petel
Quentin Petel

Reputation: 625

To get an array out of the box on the Laravel / Lumen side, you have to send the array this way :

http://localhost/search?feature_id[]=1&feature_id[]=2&feature_id[]=3...

In a weak typed languages like PHP, the [] is actually being used as an internal work around in order to be able to get multi valued parameters. You could also specify an index :

http://localhost/search?feature_id[0]=1&feature_id[1]=2&feature_id[2]=3...

You could then use in you controller :

    if ($request->filled('feature_id')) {
        // You could also check that you have a php array :  && is_array($request->input('feature_id'))
        // And that it's not an empty array : && count($request->input('feature_id'))
        $query = $query->whereIn('feature_id', $request->input('feature_id'));
    }

Upvotes: 0

Sohel0415
Sohel0415

Reputation: 9853

Use explode() to make arrays of id.

$ids = explode(",",$request->get('feature_id'));
$query = $query->whereIn('feature_id', $ids);

Upvotes: 5

Related Questions