Laravel中不存在方法addEagerConstraints

时间:2018-05-31 14:01:41

标签: laravel eloquent laravel-5.6

我正在Laravel 5.6上构建一个小应用程序,我正在使用Company模型,我与模型hasManyFinancialAndRisk关系,如下所示:

class Company extends Model {

    use SoftDeletes;

    protected $fillable = [
        'name', 'slug', 'establishment', 'parent_id', 'website', 'updates'
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'created_at','updated_at','deleted_at'
    ];

    public function financial()
    {
        return $this->hasMany('Noetic\Plugins\Conxn\Models\Company\FinancialAndRisk', 'company_id');
    }

    public function latestFinancial()
    {
        return $this->hasMany('Noetic\Plugins\Conxn\Models\Company\FinancialAndRisk', 'company_id')->latest()->first();
    }

}

现在在某些地方,我想要最新的财务报告,所以我创建了一个函数latestFinancial

但是当我在我的控制器中时,我会做这样的事情:

public function  index()
{
    $companies = Company::with('latestFinancial')->get();

    return response()->json(['companies' => $companies], 200);
}

我收到错误:

{
    "message": "Method Illuminate\\Database\\Query\\Builder::addEagerConstraints does not exist.",
    "exception": "BadMethodCallException",
    "file": "D:\\xampp\\htdocs\\conxn\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Query\\Builder.php",
    "line": 2671,

我该如何解决这个问题。

3 个答案:

答案 0 :(得分:1)

在你的模型上你应该定义你只想要一个结果的渴望加载,所以不要说hasMany你应该做hasOne:也只是使用 - > latest();这里不需要first()

public function latestFinancial()
{
    return $this->hasOne('Noetic\Plugins\Conxn\Models\Company\FinancialAndRisk', 'company_id')->latest();
}

然后它只会给你最新的记录

答案 1 :(得分:1)

问题是->first(),因为它执行查询。删除它并使用HasOne

public function latestFinancial()
{
    return $this->hasOne('Noetic\Plugins\Conxn\Models\Company\FinancialAndRisk', 'company_id')->latest();
}

答案 2 :(得分:0)

对我来说,问题是我在查询末尾使用->get()

我删除了它,并且查询很好,即

我正式做了

public function priceCategoryEntities()
{
    return $this->hasOne((new AppUsersVipPriceCategoriesEntity), 'price_category_id', 'id')->get();
}

但是现在正在使用

public function priceCategoryEntities()
{
    return $this->hasOne((new AppUsersVipPriceCategoriesEntity), 'price_category_id', 'id');
}

错误消失了。