Home > Software design >  I can't make use of url with arguments in laravel
I can't make use of url with arguments in laravel

Time:11-13

I am working with a rest API, and I cannot do the following query, it throws me an empty array and not the answer that I want to see:

 http://localhost/project-test/public/api/contactos/buscar?name=eric&surname=almendras

controller:

 public function buscar($name,$surname){
    $contacto = Contacto::where('name', $name,'surname',$surname)->get();
    return $contacto;
}

route: (api.php)

Route::get('contactos/buscar/{name}/{surname}','ContactosController@buscar');

CodePudding user response:

You define name and surname as url params, but you include it in query string. To access it you need to use Request class:

 public function buscar(Request $request){

    $name = $request->input('name');
    $surname = $request->input('surname');

    $contacto = Contacto::where([
       'name' => $name,
       'surname' => $surname
    ])->get();

    return $contacto;
}

or change url to:

http://localhost/project-test/public/api/contactos/buscar/eric/almendras

CodePudding user response:

You need to put the 2 conditions in a separate where statement:

 $contacto = Contacto::where('name', $name)->where('surname',$surname)->get();

CodePudding user response:

As Daniel says you need to get the parameters from the Request, you then have different options when querying the model.

You can put multiple where clauses in an array, as long as you want all the operators to be =, passed to a single where:

$contacto = Contacto::where([
    'name' => $name,
    'surname' => $surname
])->get();

or an array of arrays if you want to use different operators:

$contacto = Contacto::where([
    ['name', '=', $name],
    ['surname', '<>', $surname]
])->get();

or use multiple where functions

$contacto = Contacto::where('name', $name)
                    ->where('surname', $surname)
                    ->get();

or use Laravel's magic methods:

$contacto = Contacto::whereName($name)
                    ->whereSurname($surname)
                    ->get();
  • Related