userId]; if(isset($this->params['shop_order_type']) && $this->params['shop_order_type'] != 'all'){ $where[] = ['shop_order_type', '=', $this->params['shop_order_type']]; } return $where; } public function lists():array { $lists = ShopOrders::with(['orderGoods'=>function(Query $query){ $query->field(['sn','goods_name','goods_image','number','service_fee','service_total','company_name','delivery_type','shop_goods_type','goods_specs_inventory_id','specs_type','custom_attribute_items','specs'])->append(['spec_arr','delivery_type_text','shop_goods_type_text']); $query->with(['goodsSpecsInventory'=>function (Query $query) { $query->field(['id','remaining_inventory']); }]); }]) ->where($this->querySearch()) ->field('id, sn, real_name, mobile, address, pay_time, paw_way, pay_status, refund_status, create_time, amount_total, address_json, order_amount,shop_order_type') ->append(['pay_way_text','pay_status_text','refund_status_text']) ->limit($this->limitOffset, $this->limitLength) ->order('id', 'desc') ->select() ->toArray(); foreach($lists as &$item){ $companyNameArr = array_unique(array_column($item['orderGoods'],'company_name')); $orderGoodsArr = []; foreach($companyNameArr as $val){ $orderGoods = []; foreach($item['orderGoods'] as $goodVal){ $goodVal['remaining_inventory'] = isset($goodVal['goodsSpecsInventory']['remaining_inventory']) ? $goodVal['goodsSpecsInventory']['remaining_inventory']:0; if($val == $goodVal['company_name']){ unset($goodVal['goodsSpecsInventory'],$goodVal['custom_attribute_items'],$goodVal['specs'],$goodVal['sn'],$goodVal['goods_specs_inventory_id'],$goodVal['company_name']); $orderGoods[] = $goodVal; } } if(!empty($orderGoods)){ $orderGoodsArr[] = [ 'company_name' => $val, 'goods' => $orderGoods ]; } } $item['orderGoods'] = $orderGoodsArr; } return $lists; } public function count(): int { return ShopOrders::where($this->querySearch())->count(); } }