繁体   English   中英

Laravel 用 eloquent 获得相关表列的总和

[英]Laravel get sum of related table's columns with eloquent

我在用 eloquent 计算我的购物车的价格时遇到了一些麻烦,这是我的表格:

cart_products:
- cart_id
- product_id
- quantity

products:
- price

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

我正在从购物车 Model 发出请求,我正在尝试获取购物车的总价格(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方法但我无法让它正常工作)?

另一种方法是在您的购物车 model 中设置虚拟关系并计算您的购物车价格,例如

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'));

感谢大家的帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM