service->user->id; $type = $this->request->param('type', "all"); if (!in_array($type, ['all', 'back', 'cancel', 'yes'])) { $this->error(""); } $query = OrderModel ::where('agent_id', $agentId) ->with([ 'buyer' => function ($query) { return $query->field(['avatar', 'nickname']); }, 'order', 'rewards' => function ($query) use ($agentId) { return $query->where('agent_id', $agentId); }, 'order_item' ]) ->order('id desc'); if ($type !== 'all') { $query->$type(); } $data = $query->paginate($this->request->param('list_rows', 10)); $this->attachPartnerAmount($data, $agentId); $this->success("", $data); } protected function attachPartnerAmount($data, $agentId) { $orderIds = []; foreach ($data as $row) { if (!empty($row->order_id)) { $orderIds[] = intval($row->order_id); } } $sums = []; if ($orderIds) { try { $rows = PartnerReward::where('user_id', $agentId) ->whereIn('order_id', $orderIds) ->where('status', 1) ->whereIn('reward_type', PartnerConfig::instantTypes()) ->field('order_id, sum(amount) as partner_amount') ->group('order_id') ->select(); foreach ($rows as $row) { $sums[intval($row['order_id'])] = $row['partner_amount']; } } catch (\Exception $e) { $sums = []; } } foreach ($data as $row) { $amount = $sums[intval($row->order_id)] ?? 0; $row->partner_amount = $amount > 0 ? number_format($amount, 2, '.', '') : ''; } } }