2

私は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;
        }
    }
4

2 に答える 2

5

コードを読んでから、オブジェクトに対するクエリの結果をキャッシュします。

これを修正するには、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;
    }
}
于 2016-04-02T14:58:23.550 に答える
3

メソッドを非静的として定義し、それを静的として呼び出そうとしています。

  1. 静的メソッドを呼び出したい場合は、 を使用し::てメソッドを静的として定義する必要があります。

  2. それ以外の場合は、インスタンス メソッドを呼び出したい場合は、クラスをインスタンス化する必要があります。->

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

于 2016-04-02T14:05:53.997 に答える