Solution à la question initiale
Vous avez appelé une méthode non statique de manière statique. Pour rendre une fonction publique statique dans le modèle, cela ressemblerait à ceci :
public static function {
}
En général :
Post::get()
Dans ce cas particulier :
Post::take(2)->get()
Une chose à laquelle il faut faire attention, lors de la définition des relations et de la portée, et qui m'a posé problème en provoquant l'erreur "une méthode non statique ne doit pas être appelée de manière statique", c'est lorsqu'elles portent le même nom, par exemple :
public function category(){
return $this->belongsTo('App\Category');
}
public function scopeCategory(){
return $query->where('category', 1);
}
Lorsque je fais ce qui suit, j'obtiens l'erreur non statique :
Event::category()->get();
Le problème, c'est que Laravel utilise ma méthode de relation appelée category, plutôt que mon scope de catégorie (scopeCategory). Cela peut être résolu en renommant le scope ou la relation. J'ai choisi de renommer la relation :
public function cat(){
return $this->belongsTo('App\Category', 'category_id');
}
Veuillez noter que j'ai défini la clé étrangère (category_id) car sinon Laravel aurait cherché cat_id à la place, et il ne l'aurait pas trouvé, car je l'avais défini comme category_id dans la base de données.