Я использую Laravel 5. И в модели у меня есть статическая функция, которую я вызываю в контроллере. Он работает нормально, но я хочу такие же изменения в этой функции с другой нестатической функцией, и когда я вызываю ее внутри статической функции, это вызывает ошибку.
Non-static method App\Models\Course::_check_existing_course() should not be called statically
Вот моя модель
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Course extends Model {
public $course_list;
protected $primaryKey = "id";
public function questions(){
return $this->belongsToMany('App\Models\Question','course_questions')->where("status",1)->orderBy("id","DESC");
}
public static function courses_list(){
self::_check_existing_course();
}
private function _check_existing_course(){
if(empty($this->course_list)){
$this->course_list = self::where("status",1)->orderBy("course")->get();
}
return $this->course_list;
}
}
Вы определили свой метод как нестатический и пытаетесь вызвать его как статический.
если вы хотите вызвать статический метод, вы должны использовать ::
и определите ваш метод как статический.
в противном случае, если вы хотите вызвать метод экземпляра, вы должны создать экземпляр своего класса, используйте ->
public static function courses_list() {
$courses = new Course();
$courses->_check_existing_course();
}
Из чтения вашего кода вы пытаетесь кэшировать результаты вашего запроса на вашем объекте.
Есть несколько способов исправить это, используя фасад Cache (https://laravel.com/docs/5.2/cache)
Или, если вы просто хотите, чтобы он кешировался для этого запроса в данном конкретном случае, вы можете использовать статическую переменную.
class Course extends Model {
public static $course_list;
protected $primaryKey = "id";
public function questions(){
return $this->belongsToMany('App\Models\Question','course_questions')->where("status",1)->orderBy("id","DESC");
}
public static function courses_list(){
self::_check_existing_course();
}
private static function _check_existing_course(){
if(is_null(self::course_list) || empty(self::course_list)){
self::course_list = self::where("status",1)->orderBy("course")->get();
}
return self::course_list;
}
}