Метод addEagerConstraints не существует в Laravel - PullRequest
0 голосов
/ 31 мая 2018

Я создаю небольшое приложение на Laravel 5.6, где у меня есть Company модель, где у меня есть hasMany отношение к модели FinancialAndRisk примерно так:

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,

Как мне решить эту проблему.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Проблема в ->first(), потому что он выполняет запрос.Удалите его и используйте HasOne:

public function latestFinancial()
{
    return $this->hasOne('Noetic\Plugins\Conxn\Models\Company\FinancialAndRisk', 'company_id')->latest();
}
0 голосов
/ 31 мая 2018

В вашей модели вы должны определить, что хотите активную загрузку только с одним результатом, поэтому вместо того, чтобы сказать hasMany, вы должны сделать hasOne: Также просто используйте -> latest ();first () здесь не обязателен

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

Тогда он выдаст вам только последнюю связанную запись

...