sql >> Databasteknik >  >> RDS >> Mysql

Välj SUM från underfrågan när du använder whereHas i Laravel

Du kan använda withCount() för att få summa från relaterad modell som

$result = Customer::select([
            'customers.id',
            'customers.last_name'
        ])->withCount([
            'customerInvoices as invoice_sum' => function($query) {
                $query->select(DB::raw('SUM(total_price)'));
            }
        ])->whereHas('customerInvoices', function(Builder $q) {
            $q->where('customer_invoices.status', 1);
        })->get();

En annan metod för att få summa, du kan definiera en hasOne() relation i din kundmodell som

public function invoice_sum()
{
    return $this->hasOne(CustomerInvoice::class)
        ->select('customer_id',
            DB::raw('sum(total_price)')
        )->groupBy('customer_id');
}

Och i frågebyggaren

$result = Customer::select([
            'customers.id',
            'customers.last_name',
        ])->with('invoice_sum')
          ->whereHas('customerInvoices', function(Builder $q) {
            $q->where('customer_invoices.status', 1);
        })->get();      

Enligt Vallig :withCount() åsidosätter $kolumnerna på get() lägg först select() mehtod och använd sedan with() funktion




  1. SQLiteException:Tabell finns redan

  2. Visar meddelande när inga resultat hittas i PHP MySQL-sökning

  3. Hur man laddar ner Postgres bytea kolumn som fil

  4. Konvertera Long till Varchar2