原始问题的解决方案
您静态地调用了非静态方法。要使模型中的公共函数静态化,如下所示:
public static function {
}
一般来说:
Post::get()
在这种特殊情况下:
Post::take(2)->get()
在定义关系和范围时要注意的一件事是,当它们被命名相同时,我遇到了一个导致“不应静态调用非静态方法”错误的问题,例如:
public function category(){
return $this->belongsTo('App\Category');
}
public function scopeCategory(){
return $query->where('category', 1);
}
当我执行以下操作时,我收到非静态错误:
Event::category()->get();
问题是 Laravel 使用的是我的关系方法,称为类别,而不是我的类别范围 (scopeCategory)。这可以通过重命名范围或关系来解决。我选择重命名关系:
public function cat(){
return $this->belongsTo('App\Category', 'category_id');
}
请注意我定义了外键(category_id),否则 Laravel 会寻找 cat_id,但它不会找到它,因为我在数据库中将它定义为 category_id。