Comment charger des modèles dans Laravel ?
-
21-12-2019 - |
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)
{}
}
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.