schema = new Magento1Schema($connection); } /** * @return Collection> */ public function fetchOrders(int $afterEntityId, int $limit): Collection { $columns = $this->schema->existingColumns('sales_flat_order', self::ORDER_COLUMNS); if ($columns === [] || ! in_array('entity_id', $columns, true)) { return collect(); } $rows = DB::connection($this->connection) ->table('sales_flat_order') ->where('entity_id', '>', $afterEntityId) ->orderBy('entity_id') ->limit($limit) ->get($columns); return $rows->map(fn ($row) => $this->toArray($row, 'entity_id'))->values(); } /** * @param array $orderEntityIds * @return Collection> */ public function fetchItems(array $orderEntityIds): Collection { if ($orderEntityIds === []) { return collect(); } $columns = $this->schema->existingColumns('sales_flat_order_item', self::ITEM_COLUMNS); if ($columns === [] || ! in_array('order_id', $columns, true)) { return collect(); } $rows = DB::connection($this->connection) ->table('sales_flat_order_item') ->whereIn('order_id', $orderEntityIds) ->orderBy('item_id') ->get($columns); return $rows->map(function ($row) { $item = $this->toArray($row, 'item_id'); $item['order_id'] = (int) ($row->order_id ?? 0); $item['parent_item_id'] = isset($row->parent_item_id) && $row->parent_item_id !== null && $row->parent_item_id !== '' ? (int) $row->parent_item_id : null; $item['product_id'] = isset($row->product_id) && $row->product_id !== null && $row->product_id !== '' ? (int) $row->product_id : null; return $item; })->values(); } /** * @param array $itemIds * @return Collection> */ public function fetchItemsByItemIds(array $itemIds): Collection { $itemIds = array_values(array_unique(array_filter(array_map('intval', $itemIds)))); if ($itemIds === []) { return collect(); } $columns = $this->schema->existingColumns('sales_flat_order_item', self::ITEM_COLUMNS); if ($columns === [] || ! in_array('item_id', $columns, true)) { return collect(); } $rows = collect(); foreach (array_chunk($itemIds, 500) as $chunk) { $rows = $rows->concat( DB::connection($this->connection) ->table('sales_flat_order_item') ->whereIn('item_id', $chunk) ->orderBy('item_id') ->get($columns) ); } return $rows->map(function ($row) { $item = $this->toArray($row, 'item_id'); $item['order_id'] = (int) ($row->order_id ?? 0); $item['parent_item_id'] = isset($row->parent_item_id) && $row->parent_item_id !== null && $row->parent_item_id !== '' ? (int) $row->parent_item_id : null; $item['product_id'] = isset($row->product_id) && $row->product_id !== null && $row->product_id !== '' ? (int) $row->product_id : null; return $item; })->values(); } /** * Magento catalog SKUs keyed by catalog_product_entity.entity_id. * * @param array $productIds * @return array */ public function fetchCatalogSkus(array $productIds): array { $productIds = array_values(array_unique(array_filter(array_map('intval', $productIds)))); if ($productIds === [] || ! $this->schema->hasTable('catalog_product_entity')) { return []; } $columns = $this->schema->existingColumns('catalog_product_entity', ['entity_id', 'sku']); if ($columns === [] || ! in_array('entity_id', $columns, true) || ! in_array('sku', $columns, true)) { return []; } $map = []; foreach (array_chunk($productIds, 500) as $chunk) { foreach ( DB::connection($this->connection) ->table('catalog_product_entity') ->whereIn('entity_id', $chunk) ->get($columns) as $row ) { $sku = trim((string) ($row->sku ?? '')); if ($sku === '') { continue; } $map[(int) $row->entity_id] = $sku; } } return $map; } /** * @param array $orderEntityIds * @return Collection> */ public function fetchAddresses(array $orderEntityIds): Collection { if ($orderEntityIds === []) { return collect(); } $columns = $this->schema->existingColumns('sales_flat_order_address', self::ADDRESS_COLUMNS); if ($columns === [] || ! in_array('parent_id', $columns, true)) { return collect(); } $rows = DB::connection($this->connection) ->table('sales_flat_order_address') ->whereIn('parent_id', $orderEntityIds) ->orderBy('entity_id') ->get($columns); return $rows->map(function ($row) { $address = $this->toArray($row, 'entity_id'); $address['parent_id'] = (int) ($row->parent_id ?? 0); return $address; })->values(); } /** * @param array $orderEntityIds * @return Collection> */ public function fetchPayments(array $orderEntityIds): Collection { if ($orderEntityIds === []) { return collect(); } $columns = $this->schema->existingColumns('sales_flat_order_payment', self::PAYMENT_COLUMNS); if ($columns === [] || ! in_array('parent_id', $columns, true)) { return collect(); } $rows = DB::connection($this->connection) ->table('sales_flat_order_payment') ->whereIn('parent_id', $orderEntityIds) ->orderBy('entity_id') ->get($columns); return $rows->map(function ($row) { $payment = $this->toArray($row, 'entity_id'); $payment['parent_id'] = (int) ($row->parent_id ?? 0); return $payment; })->values(); } /** * MW Reward Points rows keyed later by Magento order entity_id. * * @param array $orderEntityIds * @return Collection> */ public function fetchRewardPoints(array $orderEntityIds): Collection { if ($orderEntityIds === [] || ! $this->schema->hasTable('mw_reward_point_order')) { return collect(); } $columns = $this->schema->existingColumns('mw_reward_point_order', [ 'order_id', 'reward_point', 'earn_rewardpoint', 'money', 'reward_point_money_rate', ]); if ($columns === [] || ! in_array('order_id', $columns, true)) { return collect(); } $rows = DB::connection($this->connection) ->table('mw_reward_point_order') ->whereIn('order_id', $orderEntityIds) ->get($columns); return $rows->map(function ($row) { $data = $this->toArray($row, 'order_id'); $data['order_id'] = (int) ($row->order_id ?? 0); return $data; })->values(); } /** * @param array $orderEntityIds * @return Collection> */ public function fetchShipments(array $orderEntityIds): Collection { if ($orderEntityIds === [] || ! $this->schema->hasTable('sales_flat_shipment')) { return collect(); } $columns = $this->schema->existingColumns('sales_flat_shipment', self::SHIPMENT_COLUMNS); if ($columns === [] || ! in_array('order_id', $columns, true)) { return collect(); } $rows = DB::connection($this->connection) ->table('sales_flat_shipment') ->whereIn('order_id', $orderEntityIds) ->orderBy('entity_id') ->get($columns); return $rows->map(function ($row) { $shipment = $this->toArray($row, 'entity_id'); $shipment['order_id'] = (int) ($row->order_id ?? 0); return $shipment; })->values(); } /** * @param array $shipmentIds * @return Collection> */ public function fetchShipmentItems(array $shipmentIds): Collection { if ($shipmentIds === [] || ! $this->schema->hasTable('sales_flat_shipment_item')) { return collect(); } $columns = $this->schema->existingColumns('sales_flat_shipment_item', self::SHIPMENT_ITEM_COLUMNS); if ($columns === [] || ! in_array('parent_id', $columns, true)) { return collect(); } $rows = collect(); foreach (array_chunk($shipmentIds, 500) as $chunk) { $rows = $rows->concat( DB::connection($this->connection) ->table('sales_flat_shipment_item') ->whereIn('parent_id', $chunk) ->orderBy('entity_id') ->get($columns) ); } return $rows->map(function ($row) { $item = $this->toArray($row, 'entity_id'); $item['parent_id'] = (int) ($row->parent_id ?? 0); $item['order_item_id'] = isset($row->order_item_id) && $row->order_item_id !== null && $row->order_item_id !== '' ? (int) $row->order_item_id : null; return $item; })->values(); } /** * @param array $shipmentIds * @return Collection> */ public function fetchShipmentTracks(array $shipmentIds): Collection { if ($shipmentIds === [] || ! $this->schema->hasTable('sales_flat_shipment_track')) { return collect(); } $columns = $this->schema->existingColumns('sales_flat_shipment_track', self::SHIPMENT_TRACK_COLUMNS); if ($columns === [] || ! in_array('parent_id', $columns, true)) { return collect(); } $rows = collect(); foreach (array_chunk($shipmentIds, 500) as $chunk) { $rows = $rows->concat( DB::connection($this->connection) ->table('sales_flat_shipment_track') ->whereIn('parent_id', $chunk) ->orderBy('entity_id') ->get($columns) ); } return $rows->map(function ($row) { $track = $this->toArray($row, 'entity_id'); $track['parent_id'] = (int) ($row->parent_id ?? 0); return $track; })->values(); } /** * @return array */ private function toArray(object $row, string $idColumn): array { $data = (array) $row; $data[$idColumn] = (int) ($row->{$idColumn} ?? 0); return $data; } }