вызов нестатической функции в статической функции в laravel 5

Я использую 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;
}
}

1

Решение

Вы определили свой метод как нестатический и пытаетесь вызвать его как статический.

  1. если вы хотите вызвать статический метод, вы должны использовать :: и определите ваш метод как статический.

  2. в противном случае, если вы хотите вызвать метод экземпляра, вы должны создать экземпляр своего класса, используйте ->

    public static function courses_list() {
    $courses = new Course();
    $courses->_check_existing_course();
    }

1

Другие решения

Из чтения вашего кода вы пытаетесь кэшировать результаты вашего запроса на вашем объекте.

Есть несколько способов исправить это, используя фасад 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;
}
}
1

По вопросам рекламы [email protected]