Рішення вихідного питання
Ви викликали нестатичний метод статично. Щоб зробити публічну функцію статичною в моделі, це виглядатиме так:
public static function {
}
Загалом:
Post::get()
У цьому конкретному випадку:
Post::take(2)->get()
Одне, з чим слід бути обережним при визначенні взаємозв’язків та обсягу, що у мене виникла проблема, яка спричинила помилку "нестатичний метод не повинен називатися статично", коли їх називають однаковими, наприклад:
public function category(){
return $this->belongsTo('App\Category');
}
public function scopeCategory(){
return $query->where('category', 1);
}
Коли я роблю наступне, я отримую нестатичну помилку:
Event::category()->get();
Проблема полягає в тому, що Laravel використовує мій метод взаємозв’язку, який називається категорією, а не область моєї категорії (scopeCategory). Це можна вирішити, перейменувавши область дії або взаємозв'язок. Я вирішив перейменувати стосунки:
public function cat(){
return $this->belongsTo('App\Category', 'category_id');
}
Будь ласка, зауважте, що я визначив зовнішній ключ (category_id), оскільки інакше Laravel замість нього шукав би cat_id, і він би не знайшов його, оскільки я визначив його як category_id у базі даних.
$obj->getAll()
або зробіть функцію статичною.