setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec('SET NAMES utf8mb4'); $now = time(); function uuid(): 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)); } function ri(array $a) { return $a[array_rand($a)]; } function wRand(array $items, array $weights): mixed { $total = array_sum($weights); $r = rand(1, $total); $c = 0; foreach ($items as $k => $v) { $c += $weights[$k]; if ($r <= $c) return $v; } return $items[0]; } // Load existing IDs $doctorIds = $pdo->query('SELECT id FROM doctors')->fetchAll(PDO::FETCH_COLUMN); $patientIds = $pdo->query("SELECT id FROM users WHERE roles NOT LIKE '%ROLE_DOCTOR%' AND roles NOT LIKE '%ROLE_ADMIN%'")->fetchAll(PDO::FETCH_COLUMN); echo 'Doctors: ' . count($doctorIds) . ', Patients: ' . count($patientIds) . "\n"; // ── Ratings ─────────────────────────────────────────────────────────────────── echo "Inserting ratings...\n"; $rateStmt = $pdo->prepare('INSERT INTO rates (uuid,score,created_at,updated_at,user_id,doctor_id) VALUES (?,?,?,?,?,?)'); $usedPairs = []; $rateCount = 0; $pdo->beginTransaction(); $tries = 0; while ($rateCount < 3000 && $tries < 30000) { $tries++; $doctorId = ri($doctorIds); $userId = ri($patientIds); $key = $userId . '-' . $doctorId; if (isset($usedPairs[$key])) continue; $usedPairs[$key] = true; $score = wRand([1,2,3,4,5], [3,5,15,35,42]); $ts = $now - rand(3600, 86400 * 400); $rateStmt->execute([uuid(), $score, $ts, $ts, $userId, $doctorId]); $rateCount++; if ($rateCount % 1000 === 0) { $pdo->commit(); $pdo->beginTransaction(); echo " $rateCount\n"; } } $pdo->commit(); echo "Ratings: $rateCount\n"; // ── Comments ────────────────────────────────────────────────────────────────── echo "Inserting comments...\n"; $comTexts = [ 'دکتر بسیار دلسوز و با حوصله هستند. توضیحات کامل دادند.', 'معاینه دقیق بود. تشخیص درست و درمان موثر. ممنونم.', 'وقت انتظار کم بود و کیفیت ویزیت عالی.', 'بسیار متبحر و باتجربه. مشکلم حل شد.', 'رفتار حرفه‌ای و انسانی. مطب تمیز و منظم. توصیه می‌کنم.', 'ویزیت خوبی داشتم. دارو‌ها موثر بود.', 'یکی از بهترین پزشکانی که دیده‌ام. صبور و دقیق.', 'کمی صبر کردم ولی ارزشش داشت. وقت کافی گذاشت.', 'متخصص واقعی. همه سوالات را صادقانه جواب داد.', 'رزرو آسان و ویزیت به موقع. کاملاً راضی هستم.', 'برخورد محترمانه و تخصص بالا. حتماً دوباره مراجعه می‌کنم.', 'اطلاعات دقیق و مشاوره عالی. بهترین انتخاب بود.', ]; $comStmt = $pdo->prepare('INSERT INTO comments (uuid,body,status,created_at,updated_at,user_id,doctor_id) VALUES (?,?,?,?,?,?,?)'); $comStatuses = ['approved','approved','approved','approved','pending','rejected']; $pdo->beginTransaction(); for ($i = 0; $i < 2000; $i++) { $ts = $now - rand(3600, 86400 * 400); $comStmt->execute([uuid(), ri($comTexts), ri($comStatuses), $ts, $ts, ri($patientIds), ri($doctorIds)]); if (($i+1) % 500 === 0) { $pdo->commit(); $pdo->beginTransaction(); echo " Comments: " . ($i+1) . "\n"; } } $pdo->commit(); echo "Comments: 2000\n"; // ── Blogs ───────────────────────────────────────────────────────────────────── echo "Inserting blogs...\n"; $blogStmt = $pdo->prepare('INSERT INTO blogs (uuid,title,slug,body,summary,tags,status,created_at,updated_at,author_id) VALUES (?,?,?,?,?,?,?,?,?,?)'); $blogData = [ ['راهنمای جامع پیشگیری از بیماری‌های قلبی','heart-disease-prevention','بیماری‌های قلبی از علل اصلی مرگ هستند. با تغذیه سالم، ورزش منظم، ترک سیگار و کنترل فشار خون می‌توان خطر ابتلا را کاهش داد.',['قلب','پیشگیری','سلامت'],'published'], ['تغذیه سالم برای کودکان در سنین رشد','healthy-nutrition-children','مصرف متعادل پروتئین، لبنیات، میوه و سبزیجات برای رشد کودکان ضروری است.',['کودکان','تغذیه','رشد'],'published'], ['اهمیت چکاپ منظم سالانه','annual-checkup','آزمایش خون، فشار خون و غربالگری سرطان باید سالانه انجام شوند. تشخیص زودهنگام درمان را ساده‌تر می‌کند.',['چکاپ','پیشگیری'],'published'], ['مدیریت استرس در زندگی مدرن','stress-management','تنفس عمیق، مدیتیشن، ورزش و ارتباط اجتماعی سالم از راهکارهای موثر مدیریت استرس هستند.',['استرس','سلامت روان'],'published'], ['دیابت نوع ۲: علائم و کنترل','diabetes-type2','تشنگی زیاد، ادرار مکرر و خستگی از علائم دیابت هستند. رژیم مناسب و ورزش در مدیریت آن حیاتی است.',['دیابت','قند خون'],'published'], ['نقش ورزش در سلامت قلب','exercise-cardiovascular','۱۵۰ دقیقه فعالیت هوازی در هفته برای سلامت قلب ضروری است.',['ورزش','قلب'],'published'], ['خواب کافی و سلامت روان','sleep-health','بزرگسالان به ۷-۹ ساعت خواب نیاز دارند. کمبود خواب با بیماری‌های مزمن ارتباط دارد.',['خواب','سلامت'],'published'], ['مراقبت از پوست در برابر آفتاب','skin-care-sun','استفاده از کرم ضدآفتاب SPF 30+ و پوشش مناسب از پوست محافظت می‌کند.',['پوست','ضدآفتاب'],'published'], ['پیشگیری از پوکی استخوان','osteoporosis','مصرف کلسیم، ویتامین D و ورزش منظم از پوکی استخوان جلوگیری می‌کنند.',['استخوان','کلسیم'],'published'], ['مراقبت از بینایی','eye-care','معاینه سالانه چشم و رعایت قانون ۲۰-۲۰-۲۰ برای سلامت چشم ضروری است.',['چشم','بینایی'],'published'], ['سرطان پستان؛ تشخیص زودهنگام','breast-cancer','معاینه خودآزمایی ماهانه و ماموگرافی سالانه از ابزارهای تشخیص زودهنگام هستند.',['سرطان','پستان'],'published'], ['بهداشت دهان و دندان','dental-hygiene','مسواک زدن دو بار در روز و مراجعه به دندانپزشک هر ۶ ماه توصیه می‌شود.',['دندان','بهداشت'],'published'], ['کنترل فشار خون بالا','blood-pressure','کاهش نمک، ورزش منظم و مصرف داروها در کنترل فشار خون موثر هستند.',['فشار خون','قلب'],'published'], ['واکسیناسیون بزرگسالان','adult-vaccination','آنفلوانزا، هپاتیت B و واکسن HPV از واکسن‌های مهم بزرگسالی هستند.',['واکسن','پیشگیری'],'published'], ['آرتروز زانو: درمان و بازتوانی','knee-arthritis','فیزیوتراپی، ورزش‌های تقویتی و کاهش وزن در درمان آرتروز زانو موثر هستند.',['آرتروز','ارتوپدی'],'published'], ['تغذیه در بیماری‌های کلیوی','renal-diet','رژیم کم‌پتاسیم و کم‌فسفر برای بیماران کلیوی ضروری است.',['کلیه','تغذیه'],'draft'], ['سلامت روان در محیط کار','workplace-mental-health','تعادل کار و زندگی و ارتباط موثر با همکاران از عوامل سلامت روان در کار هستند.',['سلامت روان','کار'],'published'], ['آلرژی فصلی','seasonal-allergy','اجتناب از محرک‌ها و استفاده از آنتی‌هیستامین از روش‌های اصلی مقابله با آلرژی هستند.',['آلرژی','تنفس'],'published'], ['ورزش در دوران بارداری','pregnancy-exercise','پیاده‌روی و یوگای بارداری با نظر پزشک برای مادر و جنین مفید است.',['بارداری','ورزش'],'published'], ['پیشگیری از سرطان روده','colorectal-cancer','کولونوسکوپی از سن ۴۵ سالگی و رژیم پرفیبر خطر را کاهش می‌دهند.',['سرطان','روده'],'published'], ]; $adminRow = $pdo->query("SELECT id FROM users WHERE roles LIKE '%ROLE_ADMIN%' LIMIT 1")->fetch(PDO::FETCH_ASSOC); $adminId = $adminRow ? $adminRow['id'] : ri($doctorIds); foreach ($blogData as $b) { $ts = $now - rand(86400, 86400 * 300); $blogStmt->execute([ uuid(), $b[0], $b[1] . '-' . rand(100,999), $b[2], mb_substr($b[2], 0, 200), json_encode($b[3], JSON_UNESCAPED_UNICODE), $b[4], $ts, $ts, $adminId ]); } echo 'Blogs: ' . count($blogData) . "\n"; // ── Summary ─────────────────────────────────────────────────────────────────── echo "\n=== Final counts ===\n"; $tables = ['users','doctors','clinics','clinic_doctors','clinic_specialties','clinic_services','clinic_insurances', 'doctor_specialties','doctor_expertise','doctor_provinces','doctor_cities','doctor_addresses', 'appointments','payments','rates','comments','blogs','insurances','profiles']; $total = 0; foreach ($tables as $t) { $c = (int)$pdo->query("SELECT COUNT(*) FROM `$t`")->fetchColumn(); printf(" %-30s %d\n", $t . ':', $c); $total += $c; } echo "\nTotal records: $total\n";