我的目标是对可用课程进行平均评估。但是,当我试图对课程进行平均审查时,它给我一个错误,说"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();
我当时希望它能够提供课程详细信息以及每门课程的平均评分,但它会引发错误。 谁能帮帮我吗?? 谢谢
答案 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;
}