2 回答
TA贡献1155条经验 获得超0个赞
因为with()需要得到关系。addEagerConstraints来自源代码。当您使用即时加载时,您的关系构建器将调用addEagerConstraints.
但是,您的关系方法是返回字符串(的结果avg())而不是变形关系。所以会发生错误。
你可以改变你的方法,如:
public function trader_ratings()
{
return $this->morphMany(TraderRatings::class, 'rateable')->select('*', DB::raw('AVG(rating) AS avg_rating'));
}
TA贡献1818条经验 获得超7个赞
该错误清楚地表明 trader_ratings 已经计算了平均值,并且不再是您急切加载所需的构建器实例。所以可能会做一些如下的事情,(没有测试代码,只是从我的头顶)
public function trader_ratings()
{
return $this->morphMany(TraderRatings::class, 'rateable')->select('rateable_id','rateable_type','rating');
}
// Then
$customer_classes = CustomerClassBooking::with([
'trader_class',
'trader_class.trader_ratings' => function($query`){
$query->avg('rating)
},
,'vendor'])-> // rest of query
- 2 回答
- 0 关注
- 121 浏览
添加回答
举报