La méthode de Laravel Badmethodcallexception [Find] n'existe pas

La méthode de Laravel Badmethodcallexception [Find] n'existe pas

Problème

J'ai essayé d'obtenir un modèle éloquent à partir de la base de données mais continuez à entrer dans BadmethodcallexceptionMethod [Find] n'existe pas.

Voici ce que j'ai essayé jusqu'à présent:

application d'espace de noms;
Utiliser illuminate \ database \ eloquent \ modèle;
Utiliser App \ Organisation;
Classe L'utilisateur étend le modèle
/ **
* La table de base de données utilisée par le modèle.
*
* String @var
* /
protégé $ table = 'utilisateurs';
/ **
* Les attributs exclus de la forme JSON du modèle.
*
* Array @var
* /
protégé $ HIDDEN = Array ('Mot de passe');
Organisations de fonctions publiques ()

retourner $ this-> appartenance (organisation :: classe);

Ceci est une classe d'utilisateurs de base qui vient avec chaque nouveau projet Laravel. Après avoir créé un nouvel utilisateur, je peux clairement voir que l'utilisateur avec ID3 existe dans la base de données. Cependant, quand je fais ce qui suit, je me retrouve avec le La méthode de badmethodcallexception [find] n'existe pas

La classe utilisateur étend BaseController
Fonction publique GetUser ($ id)

$ my_user = user :: find ($ id);
Renvoyez la vue ('' utilisateurs.index ', array (' utilisateur '=> $ my_user));

Mes routes de fichiers routes \ web.PHP:

Route :: get ('user / id', 'user @ getuser');
Route :: get ('/', function ()

Return View :: Make ('test');
);

Solution

Il y a quelques problèmes avec cette implémentation qui pourraient vous faire recevoir La méthode de badmethodcallexception [find] n'existe pas exception.

  • Vous devez suivre les meilleures pratiques pour nommer vos contrôleurs en tant que mot modèle + «contrôleur» afin que vous vous retrouviez avec un contracteur Userctroller au lieu d'un simple utilisateur .
  • La classe utilisateur que vous faites référence ici n'est pas réellement liée à votre modèle d'utilisateur. Si vous le remarquez, vous n'avez jamais explicitement inclus votre modèle. Donc, en supposant que vous avez déjà corrigé le point précédent, vous devrez inclure la classe User dans votre Contoller UserContr . Ce n'est qu'alors que vous pouvez faire de nouveaux objets en utilisant cette classe. Ainsi, dans votre UserController, allez et ajoutez Utiliser App \ User; au sommet. (Remarquez comment j'ai inclus App \ Organisation)
  • Une fois que vous l'avez corrigé, vous devriez exécuter le député de compositeur -o pour régénérer le compositeur.Fichier de verrouillage qui aidera à accélérer le chargement de vos cours.

Après cela, vous devriez pouvoir accéder à votre modèle d'utilisateur d'application comme vous l'aviez voulu.

Explication supplémentaire (à des fins éducatives uniquement)

Comme vous le savez, le développement Web n'a jamais voulu être un spectacle à un seul homme. Vous pouvez généralement vous attendre à collaborer avec d'autres développeurs environ 90% du temps. Pour que le projet réussisse, vous devez vous assurer que tout le monde suit les règles de codage générales.

Les règles concerneront les conventions de dénomination et je comprends que suivre une convention de dénomination définie nécessite beaucoup d'efforts et peut potentiellement perdre beaucoup de temps à l'équipe jusqu'à ce que tout le monde puisse les comprendre et les suivre. C'est particulièrement difficile pour les nouveaux développeurs qui rejoignent l'équipe.

Je vous suggère d'essayer de lire plus du code des autres avant de commencer à écrire le vôtre, juste pour avoir une idée des meilleures pratiques de l'industrie.

Certaines règles sont obligatoires et certaines sont laissées à l'équipe pour décider comment elles veulent s'approcher.

En regardant le problème d'en haut, vous remarquerez que toutes les classes doivent être écrites dans un StudLyCaps, donc UserController et non User_Controller .

Et ceci est un exemple d'une règle obligatoire à suivre.

Maintenant, un exemple de ce que vous en tant qu'équipe pouvez définir comme votre règle interne est la façon dont vous nommez vos cours, méthodes et variables.

Si on s'attend à ce qu'un projet se développe au fil du temps, vous pouvez certainement vous attendre à de nombreuses entités différentes qui, d'une manière ou d'une autre, incluent un utilisateur, il est donc important de ne pas trouver de noms vagues pour vos cours, méthodes et variables.

Mon conseil personnel ici est; N'ayez pas peur d'avoir une classe plus longue ou un nom de méthode. Si vous avez besoin d'avoir un commentaire qui explique votre méthode, alors le nom de votre méthode peut probablement être meilleur.

Un exemple de ceci est que si vous avez besoin de faire des utilisateurs d'une base de données avec une condition supplémentaire, ce sont peut-être des utilisateurs de plus de 50 ans, alors ne nommez pas votre méthode GetUsers . Une meilleure façon de le nommer est GetAllusersover50 Yearsold .