2016-04-02 2 views
1

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

+0

Я пробовал это, но в статической функции $ this-> не работает. – Jitendra

+0

Я отредактировал свой ответ. Попробуй. Он должен работать. –

1

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

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