medicalCenterRepository->findBy($criteria, ['id' => 'ASC']); } public function getShow(int $id): ?MedicalCenter { return $this->medicalCenterRepository->find($id); } public function create(array $data): MedicalCenter { $medicalCenter = new MedicalCenter(); $this->updateEntity($medicalCenter, $data); $this->em->persist($medicalCenter); $this->em->flush(); return $medicalCenter; } public function update(MedicalCenter $medicalCenter, array $data): MedicalCenter { unset($data['id']); $this->updateEntity($medicalCenter, $data); $this->em->flush(); return $medicalCenter; } public function delete(MedicalCenter $medicalCenter): void { $this->em->remove($medicalCenter); $this->em->flush(); } private function updateEntity(MedicalCenter $medicalCenter, array $data): void { if (array_key_exists('id', $data) && $data['id'] !== null && $data['id'] !== '') { $medicalCenter->setId((int) $data['id']); } if (array_key_exists('name', $data)) { $medicalCenter->setName($data['name']); } if (array_key_exists('active', $data)) { $medicalCenter->setActive($data['active']); } if (array_key_exists('regionId', $data) || array_key_exists('region_id', $data)) { $v = $data['regionId'] ?? $data['region_id']; $medicalCenter->setRegionId($v === null || $v === '' ? null : (int) $v); } if (array_key_exists('alias', $data)) { $medicalCenter->setAlias($data['alias']); } if (array_key_exists('anons', $data)) { $medicalCenter->setAnons($data['anons']); } if (array_key_exists('content', $data)) { $medicalCenter->setContent($data['content']); } if (array_key_exists('updateAt', $data) || array_key_exists('update_at', $data)) { $raw = $data['updateAt'] ?? $data['update_at']; if ($raw === null || $raw === '') { $medicalCenter->setUpdateAt(null); } elseif ($raw instanceof \DateTimeInterface) { $medicalCenter->setUpdateAt($raw); } elseif (is_string($raw)) { $medicalCenter->setUpdateAt(new \DateTimeImmutable($raw)); } } if (array_key_exists('kodUslug', $data) || array_key_exists('kod_uslug', $data)) { $medicalCenter->setKodUslug($data['kodUslug'] ?? $data['kod_uslug']); } if (array_key_exists('doctors', $data)) { $medicalCenter->setDoctors($data['doctors']); } if (array_key_exists('services', $data)) { $medicalCenter->setServices($data['services']); } if (array_key_exists('articles', $data)) { $medicalCenter->setArticles($data['articles']); } if (array_key_exists('txtUp', $data) || array_key_exists('txt_up', $data)) { $medicalCenter->setTxtUp($data['txtUp'] ?? $data['txt_up']); } if (array_key_exists('mainLinkStaff', $data) || array_key_exists('main_link_staff', $data)) { $medicalCenter->setMainLinkStaff($data['mainLinkStaff'] ?? $data['main_link_staff']); } if (array_key_exists('contraindications', $data)) { $medicalCenter->setContraindications($data['contraindications']); } if (array_key_exists('hidePicture', $data) || array_key_exists('hide_picture', $data)) { $v = $data['hidePicture'] ?? $data['hide_picture']; $medicalCenter->setHidePicture($v === null || $v === '' ? null : (int) $v); } if (array_key_exists('indications', $data)) { $medicalCenter->setIndications($data['indications']); } if (array_key_exists('linkSale', $data) || array_key_exists('link_sale', $data)) { $medicalCenter->setLinkSale($data['linkSale'] ?? $data['link_sale']); } if (array_key_exists('plusList', $data) || array_key_exists('plus_list', $data)) { $medicalCenter->setPlusList($data['plusList'] ?? $data['plus_list']); } if (array_key_exists('plusText', $data) || array_key_exists('plus_text', $data)) { $medicalCenter->setPlusText($data['plusText'] ?? $data['plus_text']); } if (array_key_exists('plusTitle', $data) || array_key_exists('plus_title', $data)) { $medicalCenter->setPlusTitle($data['plusTitle'] ?? $data['plus_title']); } if (array_key_exists('processText', $data) || array_key_exists('process_text', $data)) { $medicalCenter->setProcessText($data['processText'] ?? $data['process_text']); } if (array_key_exists('processTitle', $data) || array_key_exists('process_title', $data)) { $medicalCenter->setProcessTitle($data['processTitle'] ?? $data['process_title']); } if (array_key_exists('servicesList', $data) || array_key_exists('services_list', $data)) { $medicalCenter->setServicesList($data['servicesList'] ?? $data['services_list']); } if (array_key_exists('servicesPhotos', $data) || array_key_exists('services_photos', $data)) { $medicalCenter->setServicesPhotos($data['servicesPhotos'] ?? $data['services_photos']); } if (array_key_exists('servicesTitle', $data) || array_key_exists('services_title', $data)) { $medicalCenter->setServicesTitle($data['servicesTitle'] ?? $data['services_title']); } if (array_key_exists('sortStaff', $data) || array_key_exists('sort_staff', $data)) { $medicalCenter->setSortStaff($data['sortStaff'] ?? $data['sort_staff']); } if (array_key_exists('trainingText', $data) || array_key_exists('training_text', $data)) { $medicalCenter->setTrainingText($data['trainingText'] ?? $data['training_text']); } if (array_key_exists('trainingTextTitle', $data) || array_key_exists('training_text_title', $data)) { $medicalCenter->setTrainingTextTitle($data['trainingTextTitle'] ?? $data['training_text_title']); } if (array_key_exists('whyText', $data) || array_key_exists('why_text', $data)) { $medicalCenter->setWhyText($data['whyText'] ?? $data['why_text']); } if (array_key_exists('whyTitle', $data) || array_key_exists('why_title', $data)) { $medicalCenter->setWhyTitle($data['whyTitle'] ?? $data['why_title']); } } public function syncFromViewCenters(string $viewName = 'public.view_centers'): int { // В опции разрешаем только идентификаторы (буквы/цифры/underscore) и точку для схемы. if (!preg_match('/^[A-Za-z0-9_\.]+$/', $viewName)) { throw new \InvalidArgumentException('Invalid view name'); } $connection = $this->em->getConnection(); $sql = sprintf( 'INSERT INTO medical_center ( id, name, active, region_id, alias, anons, content, update_at, kod_uslug, doctors, services, articles, txt_up, main_link_staff, contraindications, hide_picture, indications, link_sale, plus_list, plus_text, plus_title, process_text, process_title, services_list, services_photos, services_title, sort_staff, training_text, training_text_title, why_text, why_title ) SELECT id, name, active, region_id, alias, anons, content, update_at, kod_uslug, doctors, services, articles, txt_up, main_link_staff, contraindications, hide_picture, indications, link_sale, plus_list, plus_text, plus_title, process_text, process_title, services_list, services_photos, services_title, sort_staff, training_text, training_text_title, why_text, why_title FROM %s ON CONFLICT (id) DO UPDATE SET name = EXCLUDED.name, active = EXCLUDED.active, region_id = EXCLUDED.region_id, alias = EXCLUDED.alias, anons = EXCLUDED.anons, content = EXCLUDED.content, update_at = EXCLUDED.update_at, kod_uslug = EXCLUDED.kod_uslug, doctors = EXCLUDED.doctors, services = EXCLUDED.services, articles = EXCLUDED.articles, txt_up = EXCLUDED.txt_up, main_link_staff = EXCLUDED.main_link_staff, contraindications = EXCLUDED.contraindications, hide_picture = EXCLUDED.hide_picture, indications = EXCLUDED.indications, link_sale = EXCLUDED.link_sale, plus_list = EXCLUDED.plus_list, plus_text = EXCLUDED.plus_text, plus_title = EXCLUDED.plus_title, process_text = EXCLUDED.process_text, process_title = EXCLUDED.process_title, services_list = EXCLUDED.services_list, services_photos = EXCLUDED.services_photos, services_title = EXCLUDED.services_title, sort_staff = EXCLUDED.sort_staff, training_text = EXCLUDED.training_text, training_text_title = EXCLUDED.training_text_title, why_text = EXCLUDED.why_text, why_title = EXCLUDED.why_title', $viewName ); return (int) $connection->executeStatement($sql); } }