Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wybierz SUMA z podzapytania podczas używania WhereHas in Laravel

Możesz użyć withCount() aby uzyskać sumę z powiązanego modelu jako

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

Inne podejście do uzyskania sumy, możesz zdefiniować hasOne() relacji w modelu klienta, takich jak

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

Oraz w kreatorze zapytań

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

Zgodnie z Eloquent:withCount() zastępuje $kolumny w get() problem najpierw umieść select() mehtod, a następnie użyj with() funkcja




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. virtualenv, mysql-python, pip:ktoś wie jak?

  2. Jak uznać NULL za datę MAX, zamiast ignorować ją w MySQL?

  3. odmowa dostępu do załadowania pliku danych w MySQL

  4. Jak zrobić MySQL + podciąg? + wymienić?

  5. Integracja C# i MySql