From 2984ee257676fafa80d3a03927a7a41264def438 Mon Sep 17 00:00:00 2001 From: adonis Date: Wed, 10 Jun 2026 21:06:03 +0330 Subject: [PATCH] fix migrations 2 --- database/schema/mysql-schema.sql | 4 +++ database/sql/baseline_migrations.sql | 30 +++++++++++++---- database/sql/deploy_settings_const.sql | 12 +++++-- .../fix_migrations_after_failed_migrate.sql | 32 +++++++++++++++++++ 4 files changed, 68 insertions(+), 10 deletions(-) create mode 100644 database/sql/fix_migrations_after_failed_migrate.sql diff --git a/database/schema/mysql-schema.sql b/database/schema/mysql-schema.sql index 2932321..2d7f164 100644 --- a/database/schema/mysql-schema.sql +++ b/database/schema/mysql-schema.sql @@ -1006,4 +1006,8 @@ CREATE TABLE `withdraws_01/15` ( PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; +-- بعد از load schema، Laravel نباید دوباره mysql-schema.sql را اجرا کند +INSERT INTO `migrations` (`migration`, `batch`) VALUES +('0000_00_00_000000_baseline_schema', 1); + SET FOREIGN_KEY_CHECKS = 1; diff --git a/database/sql/baseline_migrations.sql b/database/sql/baseline_migrations.sql index 378ce1a..7007106 100644 --- a/database/sql/baseline_migrations.sql +++ b/database/sql/baseline_migrations.sql @@ -1,19 +1,35 @@ -- ============================================================================= --- baseline migrations — فقط برای DB موجود که schema کامل دارد +-- baseline_migrations.sql — حتماً قبل از migrate روی DB موجود اجرا کنید -- ============================================================================= --- معمولاً لازم نیست! فقط php artisan migrate بزنید. --- migrationها idempotent هستند — اگر ستون باشد skip می‌شود. +-- اگر جدول migrations خالی باشد، Laravel کل mysql-schema.sql را load می‌کند +-- (DROP TABLE + CREATE) و داده‌های production پاک می‌شود! -- --- این فایل فقط وقتی لازم است که migrations خالی باشد و نمی‌خواهید --- Laravel فایل database/schema/mysql-schema.sql را دوباره load کند. +-- workflow DB موجود (abshode_rahimi, groosy, ...): +-- 1) بکاپ +-- 2) SOURCE baseline_migrations.sql +-- 3) php artisan migrate ← فقط ۸ migration incremental +-- 4) SOURCE deploy_settings_const.sql -- -- USE `نام_دیتابیس`; -- ============================================================================= TRUNCATE TABLE `migrations`; +-- جلوگیری از load مجدد schema dump INSERT INTO `migrations` (`migration`, `batch`) VALUES ('0000_00_00_000000_baseline_schema', 1); --- بعد: php artisan migrate --- (۸ migration incremental اجرا و ثبت می‌شود) +-- اگر schema از قبل کامل است (همه ستون‌ها هست)، این ۸ تا را هم marked کنید +-- تا migrate فقط migrationهای جدید بعد از deploy را اجرا کند: +INSERT INTO `migrations` (`migration`, `batch`) VALUES +('2026_05_25_163201_add_provider_fields_to_orders_table', 1), +('2026_06_02_000001_add_price_offset_percent_to_products_table', 1), +('2026_06_06_000001_add_total_referrals_to_customers_table', 1), +('2026_06_06_000002_alter_logs_data_to_longtext', 1), +('2026_06_06_000003_add_order_limit_columns_to_products_table', 1), +('2026_06_09_000001_add_show_in_assets_to_products_table', 1), +('2026_06_10_000001_add_use_last_price_if_zero_to_products_table', 1), +('2026_06_10_000002_add_type_column_to_settings_table', 1); + +-- اگر ستونی کم است، خطوط بالا (۸ migration) را comment کنید و فقط baseline بماند، +-- بعد php artisan migrate ستون‌های کم را اضافه می‌کند. diff --git a/database/sql/deploy_settings_const.sql b/database/sql/deploy_settings_const.sql index 98e1d62..cab4820 100644 --- a/database/sql/deploy_settings_const.sql +++ b/database/sql/deploy_settings_const.sql @@ -1,9 +1,15 @@ -- ============================================================================= -- deploy_settings_const.sql — آپدیت settings + const (بدون تغییر schema) -- --- workflow deploy: --- 1) php artisan migrate --- 2) mysql -u USER -p DATABASE < database/sql/deploy_settings_const.sql +-- workflow deploy (DB موجود — abshode_rahimi, groosy, ...): +-- 0) بکاپ +-- 1) mysql ... < database/sql/baseline_migrations.sql ← حتماً قبل از migrate +-- 2) php artisan migrate +-- 3) mysql ... < database/sql/deploy_settings_const.sql +-- +-- workflow نصب از صفر (DB خالی): +-- 1) php artisan migrate ← schema dump + incremental +-- 2) mysql ... < database/sql/deploy_settings_const.sql -- -- اصول: -- • چند بار قابل اجرا (idempotent) diff --git a/database/sql/fix_migrations_after_failed_migrate.sql b/database/sql/fix_migrations_after_failed_migrate.sql new file mode 100644 index 0000000..0ccf8b3 --- /dev/null +++ b/database/sql/fix_migrations_after_failed_migrate.sql @@ -0,0 +1,32 @@ +-- ============================================================================= +-- fix_migrations_after_failed_migrate.sql +-- ============================================================================= +-- بعد از خطای «Table already exists» روی abshode_rahimi یا سرور مشابه: +-- +-- 1) مطمئن شوید پوشه database/migrations فقط ۸ فایل 2026_* دارد +-- (فایل‌های 2014_* و 2019_* و 2023_* create_* باید حذف شده باشند) +-- +-- 2) اگر migrate قبلاً schema dump را load کرده و داده‌ها پاک شده: +-- اول بکاپ را restore کنید — این اسکریپت داده برنمی‌گرداند. +-- +-- 3) USE دیتابیس; سپس: +-- SOURCE fix_migrations_after_failed_migrate.sql; +-- +-- 4) php artisan migrate:status ← باید همه Ran باشند +-- 5) SOURCE deploy_settings_const.sql; +-- ============================================================================= + +TRUNCATE TABLE `migrations`; + +INSERT INTO `migrations` (`migration`, `batch`) VALUES +('0000_00_00_000000_baseline_schema', 1), +('2026_05_25_163201_add_provider_fields_to_orders_table', 1), +('2026_06_02_000001_add_price_offset_percent_to_products_table', 1), +('2026_06_06_000001_add_total_referrals_to_customers_table', 1), +('2026_06_06_000002_alter_logs_data_to_longtext', 1), +('2026_06_06_000003_add_order_limit_columns_to_products_table', 1), +('2026_06_09_000001_add_show_in_assets_to_products_table', 1), +('2026_06_10_000001_add_use_last_price_if_zero_to_products_table', 1), +('2026_06_10_000002_add_type_column_to_settings_table', 1); + +SELECT 'migrations fixed — run: php artisan migrate:status' AS info;