J'ai quelques problèmes pour obtenir des informations de la base de données de Laravel. J'essaie d'utiliser la méthode where et de spécifier l'id dont j'ai besoin mais j'ai toujours une erreur comme
Route::get('products/{category_id}', 'ProductsController@select_category');
Voici le code Contrôleur
public function select_category($category_id){
$products = Products::where('category_id', $category_id)->get();
return $products;
}
Api
Symfony\Component\HttpKernel\Exception\MethodNotAllowedHttpException: The GET method is not supported for this route. Supported methods: POST.
Lorsque je supprime $ category_id et où, je n'ai que Products :: all (); fonctionne bien, mais il faut spécifier où chercher.
Lien comment je spécifie le $ category_id est http: // localhost: 8000 / api / products /? category_id = 16
4 Réponses :
Le journal indique qu'il y a une erreur de route, cela n'a rien à voir avec votre modèle Eloquent
Vérifiez si vous avez un autre itinéraire en conflit avec celui-ci
Modifier: après avoir vu votre URL, vous devez utiliser " http: // localhost: 8000 / api / products / 16 "plutôt que" http: // localhost: 8000 / api / produits /? category_id = 16 "
Le second essaie d'accéder à votre route de publication "Route :: post ('products' ..." parce que, pour Laravel, tout ce qui suit le "?" est un paramètre et n'est pas utilisé dans la détection de route p >
Ce sont toutes les routes que j'ai Route :: get ('products / {id}', 'ProductsController @ show'); Route :: post ('produits', 'ProductsController @ store'); Route :: put ('produits / {id}', 'ProductsController @ update'); Route :: delete ('produits / {id}', 'ProductsController @ delete');
Assurez-vous que dans votre fichier de routes, sous la définition de cette route, vous n'avez pas de point de terminaison similaire pour une méthode de publication. Vous avez donc très probablement:
Route::get('products/{category_id}', 'ProductsController@select_category')->where('category_id', '[0-9]+');
ceci remplacera celui précédemment défini.
Pour éviter cela, vous pouvez modifier votre itinéraire actuel vers celui-ci:
XXX
je suis d'accord avec toi
changez votre URL:
<a href="{{ URL::to('products/'. $yourchategoryid ) }}">product</a>
changez également dans un fichier de vue:
http://localhost:8000/api/products/16
Je pense que cela devrait être
public function select_category(Request $request){
$products = Products::where('category_id', $request->input('category_id'))->get();
return $products;
}
si l'url est
http://localhost:8000/api/products/?category_id=16
et si l'url est
http://localhost:8000/api/products/16
Pouvez-vous poster ici d'autres itinéraires commençant par "produits"?
Je pense que votre lien est un problème. Essayez
http: // localhost: 8000 / api / products / 16ou si vous souhaitez spécifier qu'il s'agit d'un produit de catégorie spécifique, créez un itinéraire commeRoute :: get ('products / categories / {category_id} ',' ProductsController @ select_category ');et appelez-le avechttp: // localhost: 8000 / api / products / categories / 16