Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chọn SUM từ truy vấn con trong khi sử dụng whereHas trong Laravel

Bạn có thể sử dụng withCount() để lấy tổng từ mô hình liên quan dưới dạng

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

Một cách tiếp cận khác để lấy tổng, bạn có thể xác định một hasOne() mối quan hệ trong mô hình Khách hàng của bạn như

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

Và trong trình tạo truy vấn

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

Theo Eloquent:withCount () ghi đè các cột $ trên get () vấn đề đầu tiên đặt select() mehtod và sau đó sử dụng with() chức năng




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Điều gì sẽ xảy ra nếu tôi xóa ibdata1 trong mysql (LINUX)

  2. mysql chọn ngày trong phạm vi 30 ngày

  3. Nhiều biểu mẫu và một bộ thu PHP

  4. Lỗi MySQL:Không thể tạo / ghi vào tệp '/var/mysqltmp/#sql_1fbd_0.MYI' (Mã lỗi:13)

  5. Làm thế nào để xử lý lỗi cho các mục nhập trùng lặp?