在laravel 5中的静态函数中调用非静态函数

时间:2016-04-02 13:56:03

标签: php laravel-5 static-methods static-functions

我正在使用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;
        }
    }

2 个答案:

答案 0 :(得分:1)

您将方法定义为非静态方法,并且您尝试将其作为静态方式调用。

  1. 如果要调用静态方法,则应使用::并将方法定义为静态。

  2. 否则,如果要调用实例方法,则应该对您的类进行实例化,使用->

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

答案 1 :(得分: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;
    }
}