sql >> データベース >  >> RDS >> Mysql

LaravelでwhereHasを使用しているときに、サブクエリからSUMを選択します

    withCount()を使用できます 関連するモデルから合計を取得するには

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

    合計を取得する別のアプローチとして、hasOne()を定義できます。

    のような顧客モデルの関係
    public function invoice_sum()
    {
        return $this->hasOne(CustomerInvoice::class)
            ->select('customer_id',
                DB::raw('sum(total_price)')
            )->groupBy('customer_id');
    }
    

    そしてクエリビルダーで

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

    Eloquent:withCount()はget()の$columnsをオーバーライドします 最初に発行するselect() mehtodしてから、with()を使用します 関数




    1. RDLCLocalReportのExcelへのエクスポートが非常に遅い

    2. Cakephp:NOW()を検索条件で機能させる方法は?

    3. フォーマットを失うことなくtextareaからMySQLデータベースにテキストを挿入する

    4. MySQLデータベースで非ASCII文字を許可する