sql >> Database >  >> RDS >> Mysql

Selecteer SUM uit subquery tijdens het gebruik van whereHas in Laravel

U kunt withCount() gebruiken om de som van het verwante model te krijgen als

$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();

Een andere benadering om som te krijgen, kunt u een hasOne() . definiëren relatie in uw klantmodel zoals

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

En in querybuilder

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

Volgens Eloquent:withCount() overschrijft de $kolommen op get() kwestie zet eerst select() mehtod en gebruik dan with() functie




  1. Geselecteerde kolommen uit een CSV-bestand invoegen in een MySQL-database met behulp van LOAD DATA INFILE

  2. MySQL-concurrency, hoe werkt het en moet ik het in mijn applicatie verwerken?

  3. Hoe mysql-gegevens in aflopende volgorde op te halen?

  4. Een waarde coderen met behulp van de AES_ECRYPT-functie van MySQL en deze vervolgens doorgeven in een URL-tekenreeks, met behulp van PHP