Browse Source

优化 GenerateModelAnnotation 命令,在生成创建SQL时不包含自增属性

notfff 7 tháng trước cách đây
mục cha
commit
49cb8881bc

+ 16 - 5
UCore/Commands/GenerateModelAnnotation.php

@@ -20,7 +20,7 @@ use UCore\ModelCore;
  * 2. 特殊时间字段自动识别为Carbon类型
  * 3. 支持自定义Casts类型,自动识别并使用正确的类型
  * 4. 自动维护模型$attrlist属性包含所有字段
- * 5. 在模块的Databases/createsql目录下为每个表生成创建SQL文件
+ * 5. 在模块的Databases/createsql目录下为每个表生成创建SQL文件(不包含自增属性)
  * 6. 支持指定单一模块进行处理,提高效率
  *
  * 使用说明:
@@ -29,6 +29,7 @@ use UCore\ModelCore;
  *    - fillable字段标记:在模型文件中添加  attrlist start  和  attrlist end  注释块
  * 2. 对于使用自定义Cast类的字段,会自动识别并使用Cast类作为类型
  * 3. 可以通过指定模块名称参数,只处理特定模块的模型
+ * 4. 生成的SQL文件中不包含AUTO_INCREMENT属性,便于在不同环境中使用
  *
  * @package UCore\Commands
  *
@@ -54,7 +55,7 @@ class GenerateModelAnnotation extends Command
      *
      * @var string
      */
-    protected $description = '生成模型property注释和表创建SQL文件,支持自定义Casts类型,可指定单一模块处理';
+    protected $description = '生成模型property注释和表创建SQL文件(不含自增属性),支持自定义Casts类型,可指定单一模块处理';
 
     private $fillable = [];
 
@@ -587,18 +588,28 @@ class GenerateModelAnnotation extends Command
     }
 
     /**
-     * 获取表的创建SQL语句
+     * 获取表的创建SQL语句,并移除自增属性
      *
      * @param string $tableName 表名
      * @param \Illuminate\Database\Connection $connection 数据库连接
-     * @return string 创建表的SQL语句
+     * @return string 创建表的SQL语句(不包含自增属性)
      */
     protected function getCreateTableSQL($tableName, $connection)
     {
         try {
             $result = $connection->select("SHOW CREATE TABLE `{$tableName}`");
             if (!empty($result) && isset($result[0]->{'Create Table'})) {
-                return $result[0]->{'Create Table'};
+                $createTableSQL = $result[0]->{'Create Table'};
+
+                // 移除 AUTO_INCREMENT=xxx 部分
+                $createTableSQL = preg_replace('/\s+AUTO_INCREMENT=\d+/', '', $createTableSQL);
+
+                // 移除字段定义中的 AUTO_INCREMENT 属性
+                $createTableSQL = preg_replace('/\s+AUTO_INCREMENT/', '', $createTableSQL);
+
+                $this->debug("已移除自增属性: " . ($createTableSQL !== $result[0]->{'Create Table'} ? "是" : "否"));
+
+                return $createTableSQL;
             }
         } catch (\Exception $e) {
             $this->output->writeln("<fg=red>获取表 {$tableName} 的创建SQL失败: " . $e->getMessage() . "</>");

+ 6 - 0
app/Module/Shop/Databases/GenerateSql/README.md

@@ -0,0 +1,6 @@
+# 自动生成的SQL文件目录
+
+**警告:这是自动生成的目录,请勿手动修改此目录下的任何文件!**
+
+此目录下的SQL文件由系统自动生成,用于记录数据库表结构。
+如需修改表结构,请修改对应的模型文件,然后重新运行生成命令。

+ 20 - 0
app/Module/Shop/Databases/GenerateSql/shop_categories.sql

@@ -0,0 +1,20 @@
+-- ******************************************************************
+-- 表 kku_shop_categories 的创建SQL
+-- 对应的Model: App\Module\Shop\Models\ShopCategory
+-- 警告: 此文件由系统自动生成,禁止修改!
+-- ******************************************************************
+
+CREATE TABLE `kku_shop_categories` (
+  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '分类ID,主键',
+  `name` varchar(50) NOT NULL COMMENT '分类名称',
+  `code` varchar(50) NOT NULL COMMENT '分类编码(唯一)',
+  `icon` varchar(255) DEFAULT NULL COMMENT '分类图标',
+  `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序权重',
+  `parent_id` int unsigned DEFAULT NULL COMMENT '父分类ID(可为空,用于实现分类层级)',
+  `is_active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否激活(0:否, 1:是)',
+  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `shop_categories_code_unique` (`code`),
+  KEY `shop_categories_parent_id_index` (`parent_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商店分类表';

+ 30 - 0
app/Module/Shop/Databases/GenerateSql/shop_items.sql

@@ -0,0 +1,30 @@
+-- ******************************************************************
+-- 表 kku_shop_items 的创建SQL
+-- 对应的Model: App\Module\Shop\Models\ShopItem
+-- 警告: 此文件由系统自动生成,禁止修改!
+-- ******************************************************************
+
+CREATE TABLE `kku_shop_items` (
+  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '商品ID,主键',
+  `name` varchar(100) NOT NULL COMMENT '商品名称',
+  `description` text COMMENT '商品描述',
+  `category_id` int unsigned NOT NULL COMMENT '分类ID,外键关联kku_shop_categories表',
+  `item_id` int unsigned NOT NULL COMMENT '关联的物品ID,外键关联kku_item_items表',
+  `item_quantity` int NOT NULL DEFAULT '1' COMMENT '物品数量',
+  `price` int NOT NULL COMMENT '价格',
+  `currency_id` int unsigned NOT NULL COMMENT '货币类型ID',
+  `max_buy` int NOT NULL DEFAULT '0' COMMENT '最大购买数量(0表示无限制)',
+  `is_active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否激活(0:否, 1:是)',
+  `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序权重',
+  `image` varchar(255) DEFAULT NULL COMMENT '商品图片',
+  `start_time` timestamp NULL DEFAULT NULL COMMENT '上架时间',
+  `end_time` timestamp NULL DEFAULT NULL COMMENT '下架时间',
+  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  KEY `shop_items_category_id_index` (`category_id`),
+  KEY `shop_items_item_id_index` (`item_id`),
+  KEY `shop_items_currency_id_index` (`currency_id`),
+  KEY `shop_items_is_active_index` (`is_active`),
+  KEY `shop_items_sort_order_index` (`sort_order`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商店商品表';

+ 18 - 0
app/Module/Shop/Databases/GenerateSql/shop_promotion_items.sql

@@ -0,0 +1,18 @@
+-- ******************************************************************
+-- 表 kku_shop_promotion_items 的创建SQL
+-- 对应的Model: App\Module\Shop\Models\ShopPromotionItem
+-- 警告: 此文件由系统自动生成,禁止修改!
+-- ******************************************************************
+
+CREATE TABLE `kku_shop_promotion_items` (
+  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '关联ID,主键',
+  `promotion_id` int unsigned NOT NULL COMMENT '促销ID,外键关联kku_shop_promotions表',
+  `shop_item_id` int unsigned NOT NULL COMMENT '商品ID,外键关联kku_shop_items表',
+  `custom_discount_value` int DEFAULT NULL COMMENT '自定义折扣值(可为空,优先于促销活动的折扣值)',
+  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  UNIQUE KEY `shop_promotion_items_promotion_id_shop_item_id_unique` (`promotion_id`,`shop_item_id`),
+  KEY `shop_promotion_items_promotion_id_index` (`promotion_id`),
+  KEY `shop_promotion_items_shop_item_id_index` (`shop_item_id`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商店促销商品关联表';

+ 25 - 0
app/Module/Shop/Databases/GenerateSql/shop_promotions.sql

@@ -0,0 +1,25 @@
+-- ******************************************************************
+-- 表 kku_shop_promotions 的创建SQL
+-- 对应的Model: App\Module\Shop\Models\ShopPromotion
+-- 警告: 此文件由系统自动生成,禁止修改!
+-- ******************************************************************
+
+CREATE TABLE `kku_shop_promotions` (
+  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '促销ID,主键',
+  `name` varchar(100) NOT NULL COMMENT '促销名称',
+  `description` text COMMENT '促销描述',
+  `banner` varchar(255) DEFAULT NULL COMMENT '促销横幅图片',
+  `discount_type` tinyint NOT NULL DEFAULT '1' COMMENT '折扣类型(1:固定折扣, 2:百分比折扣)',
+  `discount_value` int NOT NULL COMMENT '折扣值(固定折扣为具体金额,百分比折扣为1-100的整数)',
+  `is_active` tinyint(1) NOT NULL DEFAULT '1' COMMENT '是否激活(0:否, 1:是)',
+  `sort_order` int NOT NULL DEFAULT '0' COMMENT '排序权重',
+  `start_time` timestamp NULL DEFAULT NULL COMMENT '开始时间',
+  `end_time` timestamp NULL DEFAULT NULL COMMENT '结束时间',
+  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  KEY `shop_promotions_is_active_index` (`is_active`),
+  KEY `shop_promotions_sort_order_index` (`sort_order`),
+  KEY `shop_promotions_start_time_index` (`start_time`),
+  KEY `shop_promotions_end_time_index` (`end_time`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商店促销活动表';

+ 26 - 0
app/Module/Shop/Databases/GenerateSql/shop_purchase_logs.sql

@@ -0,0 +1,26 @@
+-- ******************************************************************
+-- 表 kku_shop_purchase_logs 的创建SQL
+-- 对应的Model: App\Module\Shop\Models\ShopPurchaseLog
+-- 警告: 此文件由系统自动生成,禁止修改!
+-- ******************************************************************
+
+CREATE TABLE `kku_shop_purchase_logs` (
+  `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '记录ID,主键',
+  `user_id` int unsigned NOT NULL COMMENT '用户ID',
+  `shop_item_id` int unsigned NOT NULL COMMENT '商品ID,外键关联kku_shop_items表',
+  `item_id` int unsigned NOT NULL COMMENT '物品ID,外键关联kku_item_items表',
+  `quantity` int NOT NULL COMMENT '购买数量',
+  `price` int NOT NULL COMMENT '单价',
+  `total_price` int NOT NULL COMMENT '总价',
+  `currency_id` int unsigned NOT NULL COMMENT '货币类型ID',
+  `purchase_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '购买时间',
+  `ip_address` varchar(45) DEFAULT NULL COMMENT '购买IP地址',
+  `device_info` varchar(255) DEFAULT NULL COMMENT '设备信息',
+  `created_at` timestamp NULL DEFAULT NULL COMMENT '创建时间',
+  `updated_at` timestamp NULL DEFAULT NULL COMMENT '更新时间',
+  PRIMARY KEY (`id`),
+  KEY `shop_purchase_logs_user_id_index` (`user_id`),
+  KEY `shop_purchase_logs_shop_item_id_index` (`shop_item_id`),
+  KEY `shop_purchase_logs_item_id_index` (`item_id`),
+  KEY `shop_purchase_logs_purchase_time_index` (`purchase_time`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='商店购买记录表';