diff --git a/database/migrations/2026_06_25_000001_ensure_total_referrals_column_on_customers_table.php b/database/migrations/2026_06_25_000001_ensure_total_referrals_column_on_customers_table.php new file mode 100644 index 0000000..9e14600 --- /dev/null +++ b/database/migrations/2026_06_25_000001_ensure_total_referrals_column_on_customers_table.php @@ -0,0 +1,54 @@ +unsignedInteger('total_referrals')->default(0)->after('referral_to_id'); + } else { + $table->unsignedInteger('total_referrals')->default(0); + } + }); + } + + if (! Schema::hasColumn('customers', 'total_referrals')) { + return; + } + + DB::statement(" + 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`) <> '' + "); + } + + public function down(): void + { + // عمداً خالی — rollback ستون را حذف نمی‌کند + } +}; diff --git a/database/sql/fix_missing_total_referrals_column.sql b/database/sql/fix_missing_total_referrals_column.sql new file mode 100644 index 0000000..509e26a --- /dev/null +++ b/database/sql/fix_missing_total_referrals_column.sql @@ -0,0 +1,60 @@ +-- 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';