У меня есть проект laravel с версией фреймворка laravel 8.11.2. когда я хочу работать с другими агрегатными функциями, например withSum () показать мне ошибку

Мой код:

       $buyInvoice=BuyInvoice::Where([
        ['provider_id',$validatedData['ProviderCode']],
        ['InvoiceDate','>',$fromDate],
        ['InvoiceDate','<',$ToDate],
    ])->withSum('jewelsItems', 'weight')
         ->orderBy('jewelsItems_sum_weight')
         ->get();

Описание: я пытаюсь суммировать веса всех драгоценных камней, которые есть в общей накладной, которую я нашел с некоторыми условиями, и сохраняю ее в новом столбце для каждой накладной.

Точка: я не хочу использовать сырые выражения, потому что они уязвимости

Модели:

1. модель ювелирного изделия:

    protected $table = 'jewel_items';

public function jewel(){
    return $this->belongsTo('App\Models\Jewel');
}

public function buyInvoice(){
    return $this->belongsTo(BuyInvoice::class,'buy_invoice_id');
}

2. купить Модель счета:

    protected $table = 'buy_invoices';

public function provider(){
    return $this->belongsTo(Provider::class,'provider_id');
}

public function jewelsItems(){
return $this->hasMany(JewelsItem::class,'buy_invoice_id');
}

Ошибка:

Call to undefined method App\Models\BuyInvoice::withSum()

Это связано с моей структурой? Как я могу это полностью исправить?

0
yassin 11 Фев 2021 в 19:38

1 ответ

Лучший ответ

У вас недостаточно новой версии Laravel 8.

Примечания к выпуску 8.x

v8.12.0 (2020-10-29) ... Добавлены методы withMax() | withMin() | withSum() | withAvg() в Illuminate/Database/Eloquent/Concerns/QueriesRelationships (# 34965, f4e4d95, # 35004) ...

Вам нужна как минимум версия 8.12.0.

1
lagbox 11 Фев 2021 в 20:35