为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕姐4208626 2023-09-22 16:48:50
我在用雄辩的方式计算购物车的价格时遇到一些麻烦,这是我的表格: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方法,但无法使其正常工作)?
查看完整描述

2 回答

?
GCT1015

TA贡献1827条经验 获得超4个赞

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


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


查看完整回答
反对 回复 2023-09-22
?
长风秋雁

TA贡献1757条经验 获得超7个赞

我最终设法使用原始 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'));

感谢大家的帮助!


查看完整回答
反对 回复 2023-09-22
  • 2 回答
  • 0 关注
  • 54 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信