在float LARAVEL上调用成员函数addEagerConstraints()

时间:2018-01-05 07:20:02

标签: php mysql laravel laravel-5 eloquent

我的目标是对可用课程进行平均评估。但是,当我试图对课程进行平均审查时,它给我一个错误,说"message": "Call to a member function addEagerConstraints() on float"

我的课程模式

 public function rating(){
    return $this->hasMany(Rating::class);
}
public function averageRating(){
    return round($this->rating()->avg('ratings'),1);
}

评级模型

 public function user(){
        return $this->belongsTo(User::class);
    }
    public function course(){
        return $this->belongsTo(Course::class);
    }

我的控制器

$result = Course::with('averageRating')->get();

我当时希望它能够提供课程详细信息以及每门课程的平均评分,但它会引发错误。 谁能帮帮我吗?? 谢谢

2 个答案:

答案 0 :(得分:3)

AverageRating方法不是关系,你不能使用它,例如关系。 如果您想要平均评分,请将averageRating设置为附加属性。

Course.php:

protected $appends = [
    'average-rating'
];

function getAverageRatingAttribute(){
    return round($this->rating()->avg('ratings'),1);
}

答案 1 :(得分:0)

with用于急切加载实现,因此 Laravel期望在尝试加载时返回一个雄辩的模型。但是你传递一个浮点值(使用round())。

解决方案是简单地加载:

$result = Course::with('rating')->get();

然后通过执行以下操作来访问平均评分:

foreach($result as $r){
    echo $r->averageRating;
}