Reputation: 1146
im using laravel 5.4 and i have a brands and a products table. i want to define two parameter in route and get them in controller or RouteServiceProvider to search.
imagine : site.com/samsung/ => get all products with samsung brand.
and : site.com/samsung/galaxys8 => get all products with samsung brand and galaxys8 model
i can define this using two separate route and controller method : (define route one with 1 parameter{brand} and controller@method1 and define route two with 2 parameters {brand}/{product} and controller@method2)
can i do this better? im a little new in laravel . thank you
Route::get('/{brand}', 'AdvertismentController@show');
Route::get('/{brand}/{product}', 'AdvertismentController@show2');
public function show($brand)
{
$brands = Advertisment::where('brand' , $brand)->get();
return $brands;
}
public function show2($brand , $product)
{
$products = Advertisment::where('product' , $product)->get();
return $products;
}
Upvotes: 7
Views: 22004
Reputation: 2436
I guess that you want to combine the similar controller actions, you can use optional parameters like this:
Route::get('/{brand}/{product?}', 'AdvertismentController@show');
public function show($brand, $product = null)
{
if (!is_null($product)) {
$results = Advertisment::where('product' , $product)->get();
} else {
$results = Advertisment::where('brand' , $brand)->get();
}
return $results;
}
Upvotes: 14
Reputation: 546
Just like on this example question here
You pass two arguments on the URI:
Route::get('/{brand}/{product}', 'AdvertismentController@show2');
And on the view:
route('remindHelper',['brand'=>$brandName, 'product'=>productId]);
Upvotes: 7