Wie lade ich Modelle in Laravel?
-
21-12-2019 - |
Frage
Ich begann, Laravel zu studieren, und stieß bei der Verwendung von Modellen auf ein Problem.Wie lade ich sie?Zum Beispiel habe ich es in CodeIgniter so verwendet $model = $this->load->model('some_model')
.In Laravel, wenn ich es vom Controller aus aufrufe Sites::OfUser()
Es funktioniert gut, aber wenn ich anrufe Sites::getId()
Es heißt, dass die Methode statisch sein sollte ...Ist es möglich, eine Methode ohne Statik aufzurufen, oder muss ich für jedes Modell Fassaden erstellen?
Mein Modell sieht so aus:
namespace Models;
use Eloquent;
class Sites extends Eloquent {
public function scopeOfUser($query)
{}
public function getId($name)
{}
}
Lösung
für statische Methode--
$ type= Sites :: ScopeOfuser ($ abfragen);
und wenn Sie normal wie Codediter möchten, verwenden Sie dann--
$ modell= neue Sites ();
$ type= $ modell-> scopeofuser ($ abfragen);
Andere Tipps
Sie können natürlich eine statische Methode im Modell erstellen und darin statische Arbeiten ausführen (ID für Namen abrufen oder was auch immer).
Das ist kein Problem.
Sie müssen es jedoch als statisch deklarieren, wenn Sie das verwenden möchten ::
, was Sie nicht tun.
public static /* <-- this */ function getId($name)
{
// Do work
// return $result;
}
Wenn Sie mit auf eine Methode zugreifen möchten ::
, müssen Sie daraus eine statische Methode machen oder eine erstellen Fassade.
Der Grund warum Sites::OfUser()
„funktioniert“, weil Sie dieser Methode das Präfix vorangestellt haben scope
.
Bereiche ermöglichen Ihnen die einfache Wiederverwendung der Abfragelogik in Ihren Modellen.Um einen Bereich zu definieren, präfix einfach eine Modellmethode mit
scope
.
Wenn Sie Fassaden verwenden möchten, können Sie meiner Antwort folgen Hier zum Erstellen einer Fassade.