Laravel BadMethodcallexception -Methode [Find] existiert nicht

Laravel BadMethodcallexception -Methode [Find] existiert nicht

Problem

Ich habe versucht, ein beredtes Modell aus der Datenbank zu bekommen, aber ich stehe weiter BadmethodcallexceptionMethod [Find] ist nicht vorhanden.

Hier ist, was ich bisher versucht habe:

Namespace App;
Verwenden Sie Illuminate \ Database \ eloquent \ Modell;
app \ organisation verwenden;
Klasse User erweitert das Modell
/**
* Die vom Modell verwendete Datenbanktabelle.
*
* @var String
*/
geschützt $ table = 'user';
/**
* Die Attribute, die aus dem JSON -Formular des Modells ausgeschlossen sind.
*
* @var Array
*/
geschützt $ hidden = array ('Passwort');
öffentliche Funktionsorganisationen ()

return $ this-> hingaceStomany (Organisation :: Klasse);

Dies ist eine grundlegende Benutzerklasse, die mit jedem neuen Laravel -Projekt geliefert wird. Nach dem Erstellen eines neuen Benutzers kann ich deutlich sehen, dass der Benutzer mit ID3 in der Datenbank vorhanden ist. Wenn ich jedoch Folgendes mache, habe ich am Ende mit dem BadMethodcallexception -Methode [Find] existiert nicht

Der Klassenbenutzer erweitert BaseController
öffentliche Funktion GetUser ($ ID)

$ my_user = user :: find ($ id);
Rückgabeansicht ('Benutzer.index ', array (' user '=> $ my_user));

Meine Routen -Dateirouten \ Web.PHP:

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

Rückgabeansicht :: Make ('Test');
);

Lösung

Es gibt einige Probleme mit dieser Implementierung, die dazu führen, dass Sie empfangen werden BadMethodcallexception -Methode [Find] existiert nicht Ausnahme.

  • Sie sollten die Best Practices bei der Benennung Ihrer Controller als Ihr Modell + „Controller“ -Swort befolgen, damit Sie einen UserController anstelle von Benutzer haben .
  • Die Benutzerklasse, die Sie hier verweisen. Wenn Sie es bemerken, haben Sie Ihr Modell nie explizit eingeschlossen. Angenommen, Sie müssen den vorherigen Punkt bereits behoben . Nur dann können Sie mit dieser Klasse neue Objekte erstellen. In Ihrem UserController Gehen Sie also und verwenden Sie App \ User. oben. (Beachten Sie, wie ich App \ organisation eingeschlossen habe)
  • Sobald Sie es behoben haben, sollten Sie Composer Dump -o ausführen, um den Komponisten zu regenerieren.Sperrdatei, mit der das Laden Ihrer Klassen beschleunigt wird.

Danach sollten Sie in der Lage sein, auf Ihr App \ Benutzermodell zugreifen zu können, wie Sie es beabsichtigt haben.

Weitere Erklärung (nur für Bildungszwecke)

Wie Sie wissen, hat die Webentwicklung nie eine Ein-Mann-Show sein. Sie können im Allgemeinen damit rechnen, in etwa 90% der Fälle mit anderen Entwicklern zusammenzuarbeiten. Damit das Projekt erfolgreich ist, müssen Sie sicherstellen, dass alle allgemeinen Codierungsregeln verfolgen.

In den Regeln geht es darum, Konventionen zu benennen, und ich verstehe, dass das Aufhalten einer eindeutigen Namenskonvention viel Aufwand erfordert und möglicherweise viel Zeit damit verschwenden kann, bis jeder sie verstehen und ihnen folgen kann. Dies ist besonders schwierig für neue Entwickler, die sich dem Team anschließen.

Ich würde vorschlagen, dass Sie versuchen, mehr von dem Code anderer Leute zu lesen, bevor Sie anfangen, Ihre zu schreiben, nur um ein Gefühl für die besten Branchenpraktiken zu bekommen.

Einige Regeln sind obligatorisch und andere werden dem Team überlassen, um zu entscheiden, wie sie sich nähern möchten.

Wenn Sie sich das Problem von oben ansehen, werden Sie feststellen .

Und dies ist ein Beispiel für eine obligatorische Regel.

Ein Beispiel für das, was Sie als Team als interne Regel definieren können, ist, wie Sie Ihre Klassen, Methoden und Variablen benennen.

Wenn erwartet wird, dass ein Projekt im Laufe der Zeit wächst, können Sie sicherlich viele verschiedene Entitäten erwarten, die auf die eine oder andere Weise einen Benutzer umfassen. Es ist daher wichtig, dass Sie keine vagen Namen für Ihre Klassen, Methoden und Variablen finden.

Mein persönlicher Tipp hier ist; Haben Sie keine Angst, eine längere Klasse oder einen Methodennamen zu haben. Wenn Sie einen Kommentar benötigen, der Ihre Methode erklärt, kann Ihr Methodenname wahrscheinlich besser sein.

Ein Beispiel dafür ist, dass, wenn Sie Benutzer aus einer Datenbank mit zusätzlicher Bedingung holen müssen, möglicherweise Benutzer über 50 Jahre sind, dann nennen Sie Ihre Methoden nicht GetUserser . Ein besserer Weg, um es zu nennen, ist GetAllusersovering50 -Jahr .