Files

63 lines
2.2 KiB
SQL
Raw Permalink Normal View History

2026-06-25 21:20:18 +03:30
-- fix_missing_total_referrals_column.sql
--
-- مشکل: php artisan migrate می‌گوید Nothing to migrate
-- ولی register خطای Unknown column 'total_referrals' می‌دهد.
--
-- علت: baseline_migrations.sql این migration را در جدول migrations ثبت کرده
-- بدون اینکه ALTER TABLE واقعاً اجرا شود.
--
2026-07-08 17:13:04 +03:30
-- راه‌حل ترجیحی (بدون SQL دستی):
-- git pull
-- php artisan migrate
-- (migration: 2026_06_25_000001_ensure_total_referrals_column_on_customers_table.php)
2026-06-25 21:20:18 +03:30
--
2026-07-08 17:13:04 +03:30
-- فقط اگر migrate در دسترس نیست، این فایل را مستقیم روی MySQL اجرا کنید:
2026-06-25 21:20:18 +03:30
-- mysql -u USER -p DATABASE_NAME < database/sql/fix_missing_total_referrals_column.sql
START TRANSACTION;
SET @db = DATABASE();
-- 1) ستون را اضافه کن (اگر نبود)
SET @sql = IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'customers' AND COLUMN_NAME = 'total_referrals') = 0,
IF(
(SELECT COUNT(*) FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'customers' AND COLUMN_NAME = 'referral_to_id') > 0,
'ALTER TABLE `customers` ADD COLUMN `total_referrals` INT UNSIGNED NOT NULL DEFAULT 0 AFTER `referral_to_id`',
'ALTER TABLE `customers` ADD COLUMN `total_referrals` INT UNSIGNED NOT NULL DEFAULT 0'
),
'SELECT ''total_referrals already exists'' AS info'
);
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
-- 2) شمارنده معرف‌ها را با داده واقعی هم‌تراز کن
UPDATE `customers` AS c
SET c.`total_referrals` = (
SELECT COUNT(*)
FROM (
SELECT `id`
FROM `customers`
WHERE `referral_to_id` = c.`referral_id`
AND `deleted_at` IS NULL
) AS r
)
WHERE c.`referral_id` IS NOT NULL
AND TRIM(c.`referral_id`) <> '';
COMMIT;
-- 3) تأیید
SELECT
CASE
WHEN COUNT(*) > 0 THEN 'OK: total_referrals exists'
ELSE 'ERROR: column still missing'
END AS status
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = 'customers'
AND COLUMN_NAME = 'total_referrals';