web-dev-qa-db-ja.com

Laravel関係の列の雄弁な合計

私はショッピングカートアプリケーションに取り組んでいますが、今では次の問題に出くわしました。

ユーザー、製品、カートオブジェクトがあります。
-Cartテーブルには、「id」、「user_id」、「product_id」、およびタイムスタンプの列のみが含まれます。
-UserModelの「hasMany」カート(ユーザーは複数の製品を保管できるため)。
-CartModelは「belongsTo」ユーザーで、CartModelは「hasMany」製品です。

ここで、合計製品を計算するために、Auth::user()->cart()->count()を呼び出します。

私の質問は、このユーザーがカート内の製品の価格(製品の列)のSUM()を取得するにはどうすればよいですか?
クエリを使用するのではなく、Eloquentを使用してこれを達成したいと思います(主に、ずっときれいだと思っているため)。

87
theAdmiral

Auth::user()->products->sum('price');

ドキュメンテーションはCollectionメソッドの一部には少し光りますが、すべてのクエリビルダ集計は http://laravel.com/docs/queries#aggregates にあるavg()以外にも利用できるようです。

177
user1669496

これはあなたの答えではありませんが、ここに来て別の問題の解決策を探している人たちのためのものです。関連テーブルの列の合計を条件付きで取得したかった。私のデータベースでは、Dealsには多くのアクティビティがあり、Activities.deal_id = deal.idおよびActivities.status = payedのActivitiesテーブルから「amount_total」の合計を取得したいので、これを行いました。

$query->withCount([
'activity AS paid_sum' => function ($query) {
            $query->select(DB::raw("SUM(amount_total) as paidsum"))->where('status', 'paid');
        }
    ]);

それは戻ります

"paid_sum_count" => "320.00"

お得な情報属性。

これは今、カウントではなく取得したい合計です。

38
ahmad ali

同様のことを試してみましたが、collect()関数を理解するまでにかなりの時間がかかりました。だから、あなたはこのように何かを持つことができます:

collect($items)->sum('amount');

これにより、すべてのアイテムの合計が表示されます。

8