private function updateVariants($service_id, $variants) { $add = array(); $update = array(); $variants_model = new shopServiceVariantsModel(); $products_model = new shopProductServicesModel(); $old_variants = $variants_model->getByField('service_id', $service_id, 'id'); $sort = 0; foreach ($variants as $item) { $item['sort'] = $sort; $sort += 1; if (empty($item['id']) || empty($old_variants[$item['id']])) { $item['service_id'] = $service_id; $add[] = $item; } else { $variant_id = $item['id']; $update[$variant_id] = $item; unset($old_variants[$variant_id]); } } $default_id = null; foreach ($add as $item) { $added_id = $variants_model->insert($item); if (!empty($item['default'])) { $default_id = $added_id; } } foreach ($update as $id => $item) { if (!empty($item['default'])) { $default_id = $id; } $variants_model->updateById($id, $item); } if ($old_variants) { $ids = array_keys($old_variants); $variants_model->delete($ids); $products_model->deleteByVariants($ids); } if (!$default_id) { $default_id = $this->query("\n SELECT id FROM `shop_service_variants`\n WHERE service_id = " . (int) $service_id . " LIMIT 1\n ")->fetchField('id'); $default_id = $default_id ? $default_id : null; } $this->updateById($service_id, array('variant_id' => $default_id)); return array_keys($variants_model->getByField('service_id', $service_id, 'id')); }