Php Laravel获取相关表的和#x27;用雄辩的语言写专栏

Php Laravel获取相关表的和#x27;用雄辩的语言写专栏,php,laravel,eloquent,relational-database,Php,Laravel,Eloquent,Relational Database,我很难用雄辩的语言计算我的手推车的价格, 这是我的桌子: cart_products: - cart_id - product_id - quantity products: - price 一个购物车可以有多个购物车产品,每个购物车产品都有一个关联的产品 我从购物车模型发出请求,我试图获取购物车的总价(Cart\u products.quantity*products.price) 我的问题是: Cart::select('cart.*', \DB::raw('IFNULL(SUM(pro

我很难用雄辩的语言计算我的手推车的价格, 这是我的桌子:

cart_products:
- cart_id
- product_id
- quantity

products:
- price
一个购物车可以有多个购物车产品,每个购物车产品都有一个关联的产品

我从购物车模型发出请求,我试图获取购物车的总价(Cart\u 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');
当我这样做的时候,我确实得到了预期的结果,但是所有不包含产品的Cart都被排除在外,我希望它们被包括在内


我怎样才能包括它们?或者有没有更好的方法(我看到了count方法,但我无法使其正常工作)?

另一种方法是在购物车模型中建立虚拟关系,然后像这样计算购物车价格

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

谢谢大家的帮助

你试过使用join而不是left join吗?是的,我使用join仍然得到相同的结果谢谢你的回答!我想做一些类似的事情,但在尝试访问cart_price(按购物车订购)时仍然遇到困难
Unknown field cart_price
with
cart::with('price:cart_price')->get()
@Maxime我已经用order by子句更新了我的答案,请看一看谢谢,这是一个很好的解决方案,我下次会记得的。我仍然在使用原始请求,因为在我的情况下,我需要返回一个雄辩的类。但这与我最初的要求是一致的