【问题标题】:Laravel: combine 2 queries into 1Laravel:将 2 个查询合并为 1 个
【发布时间】:2020-12-06 02:01:01
【问题描述】:

我有以下关系:

'订单' -> manyToMany -> '产品'

'orders' -> manyToMany -> 'collis' -> manyToMany 产品

不要介意图片中的其他表格。

我想检索所有订购的产品并获取每个产品的总数量。结果应该类似于:

[{id: 6, name: "steak", category_name: "beef", total_product_quantity: "2.00"}
{id: 7, name: "bacon", category_name: "pork", total_product_quantity: "1.00"}
{id: 9, name: "chicken filet", category_name: "chicken", total_product_quantity: "1.00"}

我得到了所有产品而没有考虑到 Colli's

$allProducts = DB::query()
      ->select(['p.id', 'p.name', 'c.name as category_name', DB::raw('sum(op.quantity) as total_product_quantity')])
      ->from('products as p')
      ->join('order_product as op', 'p.id', '=', 'op.product_id')
      ->join('orders as o', 'op.order_id', '=', 'o.id')
      ->join('categories as c', 'p.category_id', '=', 'c.id')
      ->groupBy('p.id');

以及所有出现在colli's中的产品

$allProductsInAllCollis = DB::query()
      ->select(['p.id', 'p.name', 'c.name as category_name', DB::raw('sum(co.quantity * colp.quantity) as total_product_quantity')])
      ->from('products as p')
      ->join('colli_product as colp', 'p.id', '=', 'colp.product_id')
      ->join('collis as col', 'colp.colli_id', '=', 'col.id')
      ->join('colli_order as co', 'col.id', '=', 'co.colli_id')
      ->join('orders as o', 'co.order_id', '=', 'o.id')
      ->join('categories as c', 'col.category_id', '=', 'c.id')
      ->groupBy('p.id', 'p.name', 'category_name');

两个查询都返回与上述相同的表结构(数组)。但现在我想将第一个表中的 total_product_quantity 添加到第二个表中,并返回合并后的表。我该怎么做?

我对 sql 甚至 laravel 查询构建器的了解都比较少,所以如果有更好的方法来编写查询(也许更有说服力?),请告诉我!

【问题讨论】:

    标签: laravel join eloquent query-builder laravel-query-builder


    【解决方案1】:

    您可以使用关系来获取数据, 这种关系是 hasManyThrough

    试试这个:

    按模型顺序

    public function products(){
            return $this->hasManyThrough(Colli::class, Product::class)->withPivot('quantity');
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多