98 votes

Pourquoi est-ce que j'obtiens 'Non-static method should not be called statically' quand j'invoque une méthode dans un modèle Eloquent ?

J'essaie de charger mon modèle dans mon contrôleur et j'ai essayé ceci :

return Post::getAll();

J'ai obtenu l'erreur Non-static method Post::getAll() should not be called statically, assuming $this from incompatible context

La fonction dans le modèle ressemble à ceci :

public function getAll()
{

    return $posts = $this->all()->take(2)->get();

}

Quelle est la bonne façon de charger le modèle dans un contrôleur et de renvoyer son contenu ?

0voto

Karthiga Points 382

Vous pouvez donner comme ceci

public static function getAll()
{

    return $posts = $this->all()->take(2)->get();

}

Et quand vous appelez statiquement à l'intérieur de votre fonction de contrôleur aussi

0voto

idro2k Points 42

Je viens littéralement d'arriver à la réponse dans mon cas. Je suis en train de créer un système qui a implémenté une méthode de création, donc j'ai eu cette erreur parce que j'accédais à la version surchargée et non à celle d'Eloquent.

J'espère que ça vous aide ?

0voto

Vérifiez si vous n'avez pas déclaré la méthode getAll() dans le modèle. Cela fait penser au contrôleur que vous appelez une méthode non statique.

0voto

SpinyMan Points 280

Pour utiliser la syntaxe suivante return Post::getAll(); vous devriez avoir une fonction magique __callStatic dans votre classe où vous gérez tous les appels statiques :

public static function __callStatic($method, $parameters)
{
    return (new static)->$method(...$parameters);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X