我得到了对整数成员函数 addEagerConstraints() 的错误调用

I get The Error Call to a member function addEagerConstraints() on integer

  1. 这是一个正常的代码
  2. 拖拉机工作台class
  3. 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 将不起作用。