Giải pháp cho câu hỏi ban đầu
Bạn đã gọi một phương thức không tĩnh là static. Để làm cho một hàm công khai tĩnh trong mô hình, sẽ giống như sau:
public static function {
}
Nói chung:
Post::get()
Trong trường hợp cụ thể này:
Post::take(2)->get()
Một điều cần cẩn thận, khi xác định mối quan hệ và phạm vi, mà tôi đã gặp sự cố gây ra lỗi 'phương thức không tĩnh không được gọi là phương thức tĩnh' là khi chúng được đặt tên giống nhau, ví dụ:
public function category(){
return $this->belongsTo('App\Category');
}
public function scopeCategory(){
return $query->where('category', 1);
}
Khi tôi làm như sau, tôi gặp lỗi không tĩnh:
Event::category()->get();
Vấn đề là Laravel đang sử dụng phương thức quan hệ của tôi được gọi là danh mục, chứ không phải là phạm vi danh mục (scopeCategory) của tôi. Điều này có thể được giải quyết bằng cách đổi tên phạm vi hoặc mối quan hệ. Tôi đã chọn đổi tên mối quan hệ:
public function cat(){
return $this->belongsTo('App\Category', 'category_id');
}
Vui lòng lưu ý rằng tôi đã xác định khóa ngoại (category_id) vì nếu không thì Laravel sẽ tìm cat_id thay thế và nó sẽ không tìm thấy nó, vì tôi đã định nghĩa nó là category_id trong cơ sở dữ liệu.
$obj->getAll()
hoặc làm cho hàm tĩnh.