Question

J'ai commencé à étudier Laravel et j'ai rencontré un problème avec l'utilisation de modèles.Comment les charger ?Par exemple, dans CodeIgniter, je l'ai utilisé comme $model = $this->load->model('some_model').Dans Laravel, quand je l'appelle depuis le contrôleur, comme Sites::OfUser() ça marche bien, mais quand j'appelle Sites::getId() il dit que cette méthode devrait être statique...Est-il possible d'appeler une méthode sans statique ou dois-je créer des façades pour chaque modèle ?

Mon modèle ressemble à ceci :

namespace Models;

use Eloquent;

class Sites extends Eloquent {

    public function scopeOfUser($query)
    {}

    public function getId($name)
    {}
}
Était-ce utile?

La solution

Pour la méthode statique...

$type = Sites ::scopeOfUser($query);

et si vous voulez un codeingiter normal, utilisez--

$model = nouveaux sites ();
$type = $model->scopeOfUser($query);

Autres conseils

Vous pouvez bien sûr créer une méthode statique dans le modèle et y effectuer un travail statique (obtenir l'ID du nom ou autre).

Ce n'est pas un problème.

Cependant, vous devez le déclarer statique si vous souhaitez utiliser le ::, ce que vous ne faites pas.

public static /* <-- this */ function getId($name)
{
    // Do work
    // return $result;
}

Si vous souhaitez accéder à une méthode avec ::, vous devrez en faire une méthode statique ou créer un Façade.

La raison pour laquelle Sites::OfUser() "fonctionne", c'est parce que vous avez préfixé cette méthode avec scope.

Portées vous permettent de réutiliser facilement la logique de requête dans vos modèles.Pour définir une portée, préfixez simplement une méthode de modèle avec scope.

Si vous souhaitez utiliser Façades, vous pouvez suivre ma réponse ici sur la façon de créer une façade.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top