Rozwiązanie pierwotnego pytania
Wywołałeś statyczną metodę statyczną. Aby uczynić funkcję publiczną statyczną w modelu, wyglądałoby to następująco:
public static function {
}
Ogólnie:
Post::get()
W tym konkretnym przypadku:
Post::take(2)->get()
Jedną rzeczą, na którą należy uważać podczas definiowania relacji i zakresu, z którymi miałem problem, który spowodował błąd `` metody niestatycznej nie powinna być wywoływana statycznie '', jest sytuacja, gdy mają taką samą nazwę, na przykład:
public function category(){
return $this->belongsTo('App\Category');
}
public function scopeCategory(){
return $query->where('category', 1);
}
Kiedy wykonuję następujące czynności, pojawia się błąd niestatyczny:
Event::category()->get();
Problem polega na tym, że Laravel używa mojej metody relacji o nazwie category, a nie mojego zakresu kategorii (scopeCategory). Można to rozwiązać, zmieniając nazwę zakresu lub relacji. Zdecydowałem się zmienić nazwę relacji:
public function cat(){
return $this->belongsTo('App\Category', 'category_id');
}
Zauważ, że zdefiniowałem klucz obcy (category_id), ponieważ w przeciwnym razie Laravel szukałby zamiast tego cat_id i nie znalazłby go, ponieważ zdefiniowałem go jako category_id w bazie danych.
$obj->getAll()
lub ustaw funkcję statyczną.