Laravel 使用 eloquent 获取相关表列的总和

我在用雄辩的方式计算购物车的价格时遇到一些麻烦,这是我的表格:

cart_products:
- cart_id
- product_id
- quantity

products:
- price

一个购物车可以有多个 cart_products,每个 cart_products 都有一个关联的产品

我正在从购物车模型发出请求,我试图获取购物车的总价格(cart_products.quantity * products.price)。

这是我的查询:

Cart::select('cart.*', \DB::raw('IFNULL(SUM(products.price*cart_products.quantity), 0) AS cart_price'))
        ->leftJoin('cart_products', 'cart.id', '=', 'cart_products.cart_id')
        ->join('products', 'cart_products.product_id', '=', 'products.id');

当我这样做时,我确实得到了预期的结果,但所有不包含产品的购物车都被排除在外,我希望它们被包含在内。

我怎样才能将它们包括在内?还是有更好的方法来做到这一点(我看到了withCount方法,但无法使其正常工作)?


慕姐4208626
浏览 93回答 2
2回答

GCT1015

另一种方法是在您的购物车模型中设置虚拟关系并计算您的购物车价格,例如class Cart extends Model{    public function price()    {        return $this->hasOne(CartProducts::class, 'cart_id')            ->join('products as p', 'product_id', '=', 'p.id')            ->groupBy('cart_id')            ->selectRaw('cart_id,IFNULL(SUM(products.price*cart_products.quantity), 0) as cart_price');    }}要获取购物车的价格数据,您可以查询为Cart::with('price')->get()->sortByDesc('price.cart_price');

长风秋雁

我最终设法使用原始 SQL 以另一种方式做到这一点:        Cart::select('cart.*', \DB::raw('(SELECT IFNULL(SUM(products.price*cart_products.quantity), 0) from cart_products join products on products.id = cart_products.product_id where cart_products.cart_id = cart.id) AS cart_price'));感谢大家的帮助!
打开App,查看更多内容
随时随地看视频慕课网APP