Почему я получаю «Нестатический метод не следует называть статически» при вызове метода в модели Eloquent?

Я пытаюсь загрузить мою модель в своем контроллере и пробовал это:

return Post::getAll(); 

получил ошибку Non-static method Post::getAll() should not be called statically, assuming $this from incompatible context

Функция в модели выглядит следующим образом:

 public function getAll() { return $posts = $this->all()->take(2)->get(); } 

Каков правильный способ загрузки модели в контроллер, а затем вернуть ее содержимое?

Вы определили свой метод как нестатический, и вы пытаетесь вызвать его как статический. Тем не менее …

  1. … если вы хотите вызвать статический метод, вы должны использовать :: и определить свой метод как статический.

     // Defining a static method in a Foo class. public static function getAll() { /* code */ } // Invoking that static method Foo::getAll(); 
  2. … в противном случае, если вы хотите вызвать метод экземпляра, вы должны указать свой класс, используйте -> .

     // Defining a non-static method in a Foo class. public function getAll() { /* code */ } // Invoking that non-static method. $foo = new Foo(); $foo->getAll(); 

Примечание . В Laravel почти все методы Eloquent возвращают экземпляр вашей модели, что позволяет вам цепочки методов, как показано ниже:

 $foos = Foo::all()->take(10)->get(); 

В этом коде мы статически вызываем all метод через Facade. После этого все остальные методы называются методами экземпляра .

Почему бы не попробовать добавить Scope? Сфера очень хорошая особенность Eloquent.

 class User extends Eloquent { public function scopePopular($query) { return $query->where('votes', '>', 100); } public function scopeWomen($query) { return $query->whereGender('W'); } } $users = User::popular()->women()->orderBy('created_at')->get(); 

Красноречивые # окна в Laravel Docs

Вы можете так сказать

 public static function getAll() { return $posts = $this->all()->take(2)->get(); } 

И когда вы вызываете статически внутри своей функции контроллера, также ..

Проверьте, не объявили ли вы метод getAll () в модели. Это заставляет диспетчера думать, что вы вызываете нестатический метод.

Я буквально только что пришел к ответу в моем случае. Я создаю систему, которая реализовала метод create, поэтому я получил эту фактическую ошибку, потому что я обращался к переопределенной версии, а не к Eloquent.

Надеюсь, что поможет?