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)
    {}
}
War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top