laravel中根据仓库表动态计算各个分仓库的库存sql

1.目前在做一个计算分仓仓库的库存页面。
页面如下:

clipboard.png

基本代码如下:

 $products = Product::leftJoin('product_details as pd', 'products.id', '=', 'pd.product_id')
            ->where('status', Product::STATUS_ENABLED)
            ->where(function($query) use ($sku){
                if($sku) {
                    $query->where('pd.sku','like', '%' . $sku . '%');
                }})
            ->where('type', Product::TYPE_SINGLE)
            ->orderBy('product_name', 'asc')
            ->orderBy('pd.created_at', 'desc')
            ->select('products.product_name','products.category_id','products.id','pd.num','pd.sku')
            ->paginate(1000);
            //->get();
        foreach($products as $product){
            $product->categorys = isset($product->getCategory) ? $product->getCategory->name : '';
            foreach($warehouses as $k=>$v){
                $warehousesId = $v->id;
                $product->$warehousesId = isset($product->getWarehouseStorageNum->where('warehouse_id', $warehousesId)->first()->num)?$product->getWarehouseStorageNum->where('warehouse_id', $warehousesId)->first()->num:0;
            }

        }
        
将查询好的数据,通过循环仓库warehouse表来去分库库存表warehouse_storage里面找到对面的这个商品的分库库存。

这个是仓库表,id跟分仓库表warehouse_id进行关联
clipboard.png
这个是分仓库表 product_id跟商品表的id进行关联
clipboard.png

这样的话,当warehouse表中增加了新的仓库地址,我也不需要修改代码页面就能多出新的一列来展示新的分仓库存。但是目前这样的查询太浪费时间了,效率很低。不知道能怎样优化或者使用其他方法来达到我想要的效果?才疏学浅,希望各位路过的能不啬令教!

阅读 1.8k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题