2016-04-02 35 views
1

laravel 5 kullanıyorum ve modelde denetleyicide aradığım statik bir işlev var. İyi çalışıyor ama bu işlevdeki aynı değişiklikleri başka statik olmayan bir işlevle istiyorum ve bunu statik işlev içinde çağırdığımda hata üretir., laravel 5 statik işlevinde statik olmayan bir işlevi çağırıyor 5

Non-static method App\Models\Course::_check_existing_course() should not be called statically 

İşte benim modeli

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; 
     } 
    } 

cevap

1

Sen statik olmayan olarak yöntemini belirleyen ve siz gibi statik onu çağırmak için çalışıyoruz. Statik bir yöntemi çağırmak istiyorum

  1. , sen :: kullanmak ve statik olarak yöntemini tanımlamak gerekir. sen, örnek sınıf gerektiği bir örnek yöntemini çağırmak istiyorsanız

  2. aksi halde kodunuzu okuyunca ->

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

+0

Bunu denedim ama statik işlevde $ this-> çalışmıyor. – Jitendra

+0

Cevabımı düzenledim. Şimdi dene. İşe yaramalı. –

1

kullanmak ne yapmaya çalışıyorsun önbellek sonuçları ise nesnenizdeki sorgunuz.

bu kullanım

Önbellek cephe (https://laravel.com/docs/5.2/cache) düzeltmek için birkaç yol vardır Ya da sadece istiyorsanız statik değişken kullanabilirsiniz bu özel durumda bu istek için önbelleğe.

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; 
    } 
}