From 7d1f8958e5c2d130b5d88b9e83f197e5bf529425 Mon Sep 17 00:00:00 2001 From: adonis Date: Thu, 20 Aug 2026 15:52:42 +0330 Subject: [PATCH] fix hamkar table --- ...ensure_provider_fields_on_orders_table.php | 89 +++++++++++++++++++ 1 file changed, 89 insertions(+) create mode 100644 database/migrations/2026_08_20_000001_ensure_provider_fields_on_orders_table.php diff --git a/database/migrations/2026_08_20_000001_ensure_provider_fields_on_orders_table.php b/database/migrations/2026_08_20_000001_ensure_provider_fields_on_orders_table.php new file mode 100644 index 0000000..59cc26a --- /dev/null +++ b/database/migrations/2026_08_20_000001_ensure_provider_fields_on_orders_table.php @@ -0,0 +1,89 @@ +addOrdersColumnIfMissing( + 'provider_id', + 'BIGINT UNSIGNED NULL', + 'id', + true + ); + + $afterTotalPrice = $this->ordersColumnExists('total_price') ? 'total_price' : null; + $this->addOrdersColumnIfMissing( + 'total_price_montzar', + 'DECIMAL(20,4) NULL DEFAULT NULL', + $afterTotalPrice, + false + ); + } + + public function down(): void + { + // عمداً خالی — rollback ستون را حذف نمی‌کند + } + + private function ordersTable(): string + { + return DB::getTablePrefix().'orders'; + } + + private function ordersColumnExists(string $column): bool + { + $result = DB::selectOne( + 'SELECT COUNT(*) AS cnt FROM information_schema.COLUMNS + WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND COLUMN_NAME = ?', + [DB::connection()->getDatabaseName(), $this->ordersTable(), $column] + ); + + return (int) $result->cnt > 0; + } + + private function ordersIndexExists(string $indexName): bool + { + $result = DB::selectOne( + 'SELECT COUNT(*) AS cnt FROM information_schema.STATISTICS + WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ? AND INDEX_NAME = ?', + [DB::connection()->getDatabaseName(), $this->ordersTable(), $indexName] + ); + + return (int) $result->cnt > 0; + } + + private function addOrdersColumnIfMissing( + string $column, + string $definition, + ?string $after, + bool $withIndex + ): void { + if ($this->ordersColumnExists($column)) { + return; + } + + $table = $this->ordersTable(); + $afterClause = ($after !== null && $this->ordersColumnExists($after)) + ? " AFTER `{$after}`" + : ''; + + DB::statement("ALTER TABLE `{$table}` ADD COLUMN `{$column}` {$definition}{$afterClause}"); + + if ($withIndex && $column === 'provider_id' && ! $this->ordersIndexExists('orders_provider_id_index')) { + DB::statement("ALTER TABLE `{$table}` ADD INDEX `orders_provider_id_index` (`provider_id`)"); + } + } +};