我得到了对整数成员函数 addEagerConstraints() 的错误调用
I get The Error Call to a member function addEagerConstraints() on integer
- 这是一个正常的代码
- 拖拉机工作台class
UserReviews
class 以下代码。
public function getReviewAvgAndCount() {
return $this->hasMany(UserReview::class, 'tractor_id');
}
function getAverageRatingAttribute() {
return ($this->getReviewAvgAndCount()->count());
}
public 函数 tractorTable()
{
return $this ->belongsTo('App\Model\TractorTable','tractor_id');
}
调用控制器:
$obj=TractorTable::with('tractorImage','tractorSpecData','getAverageRatingAttribute','drive')->orderBy('tractor_id', 'desc')->take(5)->get();
你不能 'eager load' 不是关系的东西。 getAverageRatingAttribute
是访问器,而不是关系方法;它不 return 关系类型对象 [BelongsTo、HasMany 等]。
由于您并不急于加载访问者将要访问的关系,因此您可能只是想对关系进行计数。 Eloquent 有能力专门执行此操作,而无需完全加载关系并且不必计算 returned 记录。为此有一个 withCount
方法:
TractorTable::with('tractorImage', 'tractorSpecData', 'drive')
->withCount('getReviewAvgAndCount') // the relationship
->orderBy('tractor_id', 'desc')
->take(5)
->get();
然后您应该能够通过每个 TractorTable
实例上的 属性 访问该计数(关系名称 snake cased + '_count'):
$tractor->get_review_avg_and_count_count;
假设你在 Laravel >= 5.2.
Laravel 6.x Docs - Eloquent - Relationships - Counting Related Models withCount
预加载 (with) 只能用于关系:https://laravel.com/docs/6.x/eloquent-relationships#eager-loading
所以 getAverageRatingAttribute
将不起作用。
- 这是一个正常的代码
- 拖拉机工作台class
UserReviews
class 以下代码。public function getReviewAvgAndCount() { return $this->hasMany(UserReview::class, 'tractor_id'); } function getAverageRatingAttribute() { return ($this->getReviewAvgAndCount()->count()); }
public 函数 tractorTable() {
return $this ->belongsTo('App\Model\TractorTable','tractor_id');
}
调用控制器:
$obj=TractorTable::with('tractorImage','tractorSpecData','getAverageRatingAttribute','drive')->orderBy('tractor_id', 'desc')->take(5)->get();
你不能 'eager load' 不是关系的东西。 getAverageRatingAttribute
是访问器,而不是关系方法;它不 return 关系类型对象 [BelongsTo、HasMany 等]。
由于您并不急于加载访问者将要访问的关系,因此您可能只是想对关系进行计数。 Eloquent 有能力专门执行此操作,而无需完全加载关系并且不必计算 returned 记录。为此有一个 withCount
方法:
TractorTable::with('tractorImage', 'tractorSpecData', 'drive')
->withCount('getReviewAvgAndCount') // the relationship
->orderBy('tractor_id', 'desc')
->take(5)
->get();
然后您应该能够通过每个 TractorTable
实例上的 属性 访问该计数(关系名称 snake cased + '_count'):
$tractor->get_review_avg_and_count_count;
假设你在 Laravel >= 5.2.
Laravel 6.x Docs - Eloquent - Relationships - Counting Related Models withCount
预加载 (with) 只能用于关系:https://laravel.com/docs/6.x/eloquent-relationships#eager-loading
所以 getAverageRatingAttribute
将不起作用。