1
votes

Méthode get non prise en charge de Laravel

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


2 commentaires

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 / 16 ou si vous souhaitez spécifier qu'il s'agit d'un produit de catégorie spécifique, créez un itinéraire comme Route :: get ('products / categories / {category_id} ',' ProductsController @ select_category '); et appelez-le avec http: // localhost: 8000 / api / products / categories / 16


4 Réponses :


0
votes

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


1 commentaires

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



0
votes

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


1 commentaires

je suis d'accord avec toi



0
votes

changez votre URL:

<a href="{{ URL::to('products/'. $yourchategoryid ) }}">product</a>

changez également dans un fichier de vue:

http://localhost:8000/api/products/16


0 commentaires

0
votes

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


0 commentaires