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();
