sql >> Database teknologi >  >> RDS >> Mysql

Vælg SUM fra underforespørgsel, mens du bruger whereHas i Laravel

Du kan bruge withCount() for at få sum fra relateret model 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 anden tilgang til at få sum, du kan definere en hasOne() relation i din kundemodel som

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

Og i forespørgselsbyggeren

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

Ifølge Veltalende :withCount() tilsidesætter $kolonnerne på get() problem først sæt select() mehtod og brug derefter with() funktion




  1. FOREIGN KEY refererer til samme tabels kolonne. Kan ikke indsætte værdier

  2. Sådan tilføjer du kombinerede unikke felters valideringsregel i Laravel 4

  3. Pgbackrest Gendan og gendan Delta

  4. Forskelle mellem DATA INFILE og LOAD DATA LOCAL INFILE