addSql('CREATE TABLE categories ( id INT AUTO_INCREMENT NOT NULL, uuid VARCHAR(36) NOT NULL, bundle VARCHAR(32) NOT NULL, label VARCHAR(255) DEFAULT NULL, status SMALLINT NOT NULL DEFAULT 1, parent_id INT DEFAULT NULL, weight INT NOT NULL DEFAULT 0, logo_id INT DEFAULT NULL, title VARCHAR(255) DEFAULT NULL, representation_id INT DEFAULT NULL, contact_phone VARCHAR(255) DEFAULT NULL, email VARCHAR(255) DEFAULT NULL, description TEXT DEFAULT NULL, slogan VARCHAR(255) DEFAULT NULL, domain VARCHAR(255) DEFAULT NULL, keywords VARCHAR(255) DEFAULT NULL, footer_description TEXT DEFAULT NULL, footer_disclaimer TEXT DEFAULT NULL, social_media JSON DEFAULT NULL, UNIQUE INDEX UNIQ_3AF346686B548B0F (uuid), INDEX idx_categories_bundle (bundle), INDEX idx_categories_parent (parent_id), INDEX idx_categories_status (status, bundle), PRIMARY KEY(id) ) DEFAULT CHARACTER SET utf8mb4 COLLATE `utf8mb4_unicode_ci`'); // States (31 provinces) $states = [ 'آذربایجان شرقی', 'آذربایجان غربی', 'اردبیل', 'اصفهان', 'البرز', 'ایلام', 'بوشهر', 'تهران', 'چهارمحال و بختیاری', 'خراسان جنوبی', 'خراسان رضوی', 'خراسان شمالی', 'خوزستان', 'زنجان', 'سمنان', 'سیستان و بلوچستان', 'فارس', 'قزوین', 'قم', 'کردستان', 'کرمان', 'کرمانشاه', 'کهگیلویه و بویراحمد', 'گلستان', 'گیلان', 'لرستان', 'مازندران', 'مرکزی', 'هرمزگان', 'همدان', 'یزد', ]; foreach ($states as $i => $label) { $uuid = $this->genUuid(); $this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','state','{$label}',1,".($i+1).")"); } // Cities (major cities per province; parent_id = state row id 1..31) $cities = [ [1,'تبریز'],[1,'مراغه'],[1,'مرند'], [2,'ارومیه'],[2,'خوی'],[2,'مهاباد'], [3,'اردبیل'],[3,'مشگین‌شهر'],[3,'پارس‌آباد'], [4,'اصفهان'],[4,'کاشان'],[4,'خمینی‌شهر'],[4,'نجف‌آباد'], [5,'کرج'],[5,'فردیس'],[5,'نظرآباد'], [6,'ایلام'],[6,'دهلران'],[6,'آبدانان'], [7,'بوشهر'],[7,'برازجان'],[7,'کنگان'], [8,'تهران'],[8,'ری'],[8,'شهریار'],[8,'اسلام‌شهر'],[8,'پردیس'], [9,'شهرکرد'],[9,'بروجن'],[9,'فارسان'], [10,'بیرجند'],[10,'قائنات'],[10,'فردوس'], [11,'مشهد'],[11,'نیشابور'],[11,'سبزوار'],[11,'تربت‌حیدریه'], [12,'بجنورد'],[12,'شیروان'],[12,'اسفراین'], [13,'اهواز'],[13,'آبادان'],[13,'خرمشهر'],[13,'دزفول'],[13,'بهبهان'], [14,'زنجان'],[14,'ابهر'],[14,'قیدار'], [15,'سمنان'],[15,'شاهرود'],[15,'دامغان'], [16,'زاهدان'],[16,'چابهار'],[16,'ایرانشهر'],[16,'زابل'], [17,'شیراز'],[17,'مرودشت'],[17,'جهرم'],[17,'فسا'], [18,'قزوین'],[18,'تاکستان'],[18,'البرز'], [19,'قم'], [20,'سنندج'],[20,'سقز'],[20,'مریوان'], [21,'کرمان'],[21,'رفسنجان'],[21,'جیرفت'],[21,'سیرجان'], [22,'کرمانشاه'],[22,'اسلام‌آباد غرب'],[22,'سرپل‌ذهاب'], [23,'یاسوج'],[23,'دهدشت'],[23,'گچساران'], [24,'گرگان'],[24,'گنبدکاووس'],[24,'علی‌آباد'], [25,'رشت'],[25,'لاهیجان'],[25,'بندرانزلی'],[25,'رودبار'], [26,'خرم‌آباد'],[26,'بروجرد'],[26,'دورود'], [27,'ساری'],[27,'بابل'],[27,'آمل'],[27,'قائم‌شهر'],[27,'نوشهر'], [28,'اراک'],[28,'خمین'],[28,'ساوه'], [29,'بندرعباس'],[29,'قشم'],[29,'کیش'],[29,'میناب'], [30,'همدان'],[30,'ملایر'],[30,'نهاوند'], [31,'یزد'],[31,'میبد'],[31,'اردکان'], ]; foreach ($cities as [$stateId,$label]) { $uuid = $this->genUuid(); $this->addSql("INSERT INTO categories (uuid,bundle,label,status,parent_id,weight) VALUES ('{$uuid}','city','{$label}',1,{$stateId},0)"); } // Medical Specialties $specialties = [ 'پزشک عمومی','قلب و عروق','مغز و اعصاب','ارتوپدی','چشم‌پزشکی', 'گوش و حلق و بینی','دندانپزشکی','زنان و زایمان','اطفال','پوست و مو', 'جراحی عمومی','داخلی','روانپزشکی','اورولوژی','فیزیوتراپی','روانشناسی', 'غدد و متابولیسم','گوارش و کبد','ریه','کلیه و مجاری ادراری', 'جراحی مغز و اعصاب','جراحی قلب','جراحی پلاستیک','تغذیه', 'طب سنتی','دندانپزشکی کودکان','ارتودنسی','پریودنتیکس', 'رادیولوژی','آزمایشگاه', ]; foreach ($specialties as $i => $label) { $uuid = $this->genUuid(); $this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','specially_doctor','{$label}',1,{$i})"); } // Doctor Services $services = [ 'ویزیت حضوری','ویزیت آنلاین','نوبت آنلاین','خدمات در منزل', 'اورژانس','جراحی','آندوسکوپی','اکوکاردیوگرافی','نوار قلب (ECG)','اسپیرومتری', ]; foreach ($services as $i => $label) { $uuid = $this->genUuid(); $this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','doctor_services','{$label}',1,{$i})"); } // Insurance Types $insuranceTypes = [ 'تامین اجتماعی','بیمه خدمات درمانی','بیمه ارتش', 'آزاد (بدون بیمه)','بیمه روستایی','بیمه کارمندی دولت', ]; foreach ($insuranceTypes as $i => $label) { $uuid = $this->genUuid(); $this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','insurance_type','{$label}',1,{$i})"); } // Supplementary Insurance $suppInsurances = [ 'بیمه ایران','بیمه آسیا','بیمه دی','بیمه ملت','بیمه پارسیان', 'بیمه البرز','بیمه سینا','بیمه رازی','بیمه کوثر','بیمه نوین', ]; foreach ($suppInsurances as $i => $label) { $uuid = $this->genUuid(); $this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','supplementary_insurance','{$label}',1,{$i})"); } // Tags $tags = [ 'سلامت','تغذیه','ورزش','بیماری‌های قلبی','دیابت', 'فشارخون','سرطان','زیبایی','کودکان','سالمندان', ]; foreach ($tags as $i => $label) { $uuid = $this->genUuid(); $this->addSql("INSERT INTO categories (uuid,bundle,label,status,weight) VALUES ('{$uuid}','tag','{$label}',1,{$i})"); } } public function down(Schema $schema): void { $this->addSql('DROP TABLE categories'); } private function genUuid(): string { return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x', mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0x0fff) | 0x4000, mt_rand(0, 0x3fff) | 0x8000, mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) ); } }