61 lines
2.1 KiB
SQL
61 lines
2.1 KiB
SQL
-- fix_missing_total_referrals_column.sql
|
|||
|
|
--
|
||
|
|
-- مشکل: php artisan migrate میگوید Nothing to migrate
|
||
|
|
-- ولی register خطای Unknown column 'total_referrals' میدهد.
|
||
|
|
--
|
||
|
|
-- علت: baseline_migrations.sql این migration را در جدول migrations ثبت کرده
|
||
|
|
-- بدون اینکه ALTER TABLE واقعاً اجرا شود.
|
||
|
|
--
|
||
|
|
-- راهحل: این فایل را مستقیم روی MySQL اجرا کنید (migrate کافی نیست).
|
||
|
|
--
|
||
|
|
-- mysql -u USER -p DATABASE_NAME < database/sql/fix_missing_total_referrals_column.sql
|
||
|
|
--
|
||
|
|
-- یا از phpMyAdmin / Adminer همین کوئریها را بزنید.
|
||
|
|
|
||
|
|
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';
|