Я пытаюсь загрузить мою модель в своем контроллере и пробовал это:
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(); }
Каков правильный способ загрузки модели в контроллер, а затем вернуть ее содержимое?
Вы определили свой метод как нестатический, и вы пытаетесь вызвать его как статический. Тем не менее …
… если вы хотите вызвать статический метод, вы должны использовать ::
и определить свой метод как статический.
// Defining a static method in a Foo class. public static function getAll() { /* code */ } // Invoking that static method Foo::getAll();
… в противном случае, если вы хотите вызвать метод экземпляра, вы должны указать свой класс, используйте ->
.
// 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.
Надеюсь, что поможет?