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
withcart::with('price:cart_price')->get()
@Maxime我已经用order by子句更新了我的答案,请看一看谢谢,这是一个很好的解决方案,我下次会记得的。我仍然在使用原始请求,因为在我的情况下,我需要返回一个雄辩的类。但这与我最初的要求是一致的