从 PHP 到 AI + Golang,程序员自救转型手记(三十二):增加 admin_rule 模型及数据表迁移

📅 2026/7/11 19:23:46
从 PHP 到 AI + Golang,程序员自救转型手记(三十二):增加 admin_rule 模型及数据表迁移
这是一个系列 Blog作者将以一个 PHP 全栈工程师的身份利用 AI 工具claude code、codex、deepseek、豆包等从零开始学习 golang 语言并最终完成 ai-go-admingithub | gitee开源项目的制作全程记录分享。在上一期我们进行了 “增加 config 模型、数据表自动迁移优化”本期将完成增加 admin_rule 模型及数据表迁移增加 admin_rule 模型及数据表迁移这次算是跑通了后续增加迁移和模型的流程如果需要示例数据也是一句话的事AI 时代太方便了。管理员规则表存储了后台的菜单数据权限节点数据等上一期我们已经完成了数据表自动迁移的优化现在称热打铁再迁移一个admin_rule表。管理员规则表 SQL 如下帮我实现对应模型及迁移模型放在internal\model\admin.go中迁移则是cmd\migrate\migrations\000001_admin.up.sql / 000001_admin.down.sqlCREATETABLEba_admin_rule(idintUNSIGNEDNOTNULLAUTO_INCREMENTCOMMENTID,pidintUNSIGNEDNOTNULLDEFAULT0COMMENT上级规则,typeenum(dir,menu,node)CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ciNOTNULLDEFAULTmenuCOMMENT规则类型:dir规则目录,menu菜单项,node权限节点,titlevarchar(50)CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ciNOTNULLDEFAULTCOMMENT规则标题,namevarchar(50)CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ciNOTNULLDEFAULTCOMMENT规则名称,pathvarchar(100)CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ciNOTNULLDEFAULTCOMMENT菜单路由路径,iconvarchar(50)CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ciNOTNULLDEFAULTCOMMENT图标,open_typeenum(tab,link,iframe)CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ciNULLDEFAULTNULLCOMMENT菜单打开方式:tab选项卡,link链接,iframeIframe,urlvarchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ciNOTNULLDEFAULTCOMMENT菜单 Url,componentvarchar(100)CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ciNOTNULLDEFAULTCOMMENT菜单组件路径,keepalivetinyintUNSIGNEDNOTNULLDEFAULT0COMMENT缓存:0关闭,1开启,extendenum(none,add_route_only,add_menu_only)CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ciNOTNULLDEFAULTnoneCOMMENT扩展属性:none无,add_route_only只添加为路由,add_menu_only只添加为菜单,remarkvarchar(255)CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ciNOTNULLDEFAULTCOMMENT备注,weighintNOTNULLDEFAULT0COMMENT权重,statustinyintUNSIGNEDNOTNULLDEFAULT1COMMENT状态:0禁用,1启用,update_timebigintUNSIGNEDNULLDEFAULTNULLCOMMENT更新时间,create_timebigintUNSIGNEDNULLDEFAULTNULLCOMMENT创建时间,PRIMARYKEY(id)USINGBTREE,INDEXpid(pidASC)USINGBTREE)ENGINEInnoDBAUTO_INCREMENT1CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ciCOMMENT菜单和权限规则表ROW_FORMATDYNAMIC;参考src\layouts\admin\index.vue的临时 MOCK 数据随便生成几行权限数据直接打印出来我手动插入。生成的迁移 SQL 如下CREATETABLEIFNOTEXISTS__PREFIX__admin_rule(idbigserialPRIMARYKEY,pidbigintDEFAULTNULL,typevarchar(50)NOTNULLDEFAULT,titlevarchar(50)NOTNULLDEFAULT,namevarchar(50)NOTNULLDEFAULT,pathvarchar(255)NOTNULLDEFAULT,iconvarchar(50)NOTNULLDEFAULT,open_typevarchar(50)NOTNULLDEFAULT,urlvarchar(255)NOTNULLDEFAULT,componentvarchar(255)NOTNULLDEFAULT,keepalivesmallintNOTNULLDEFAULT0,extendvarchar(50)NOTNULLDEFAULT,remarkvarchar(255)NOTNULLDEFAULT,weighbigintNOTNULLDEFAULT0,statussmallintNOTNULLDEFAULT1,update_timetimestamptz,create_timetimestamptz);CREATEINDEXIFNOTEXISTS__PREFIX__idx_admin_rule_pidON__PREFIX__admin_rule(pid);COMMENTONTABLE__PREFIX__admin_ruleIS菜单和权限规则表;COMMENTONCOLUMN__PREFIX__admin_rule.idISID;COMMENTONCOLUMN__PREFIX__admin_rule.pidIS上级规则;COMMENTONCOLUMN__PREFIX__admin_rule.typeIS规则类型:dir规则目录,menu菜单项,node权限节点;COMMENTONCOLUMN__PREFIX__admin_rule.titleIS规则标题;COMMENTONCOLUMN__PREFIX__admin_rule.nameIS规则名称;COMMENTONCOLUMN__PREFIX__admin_rule.pathIS菜单路由路径;COMMENTONCOLUMN__PREFIX__admin_rule.iconIS菜单图标;COMMENTONCOLUMN__PREFIX__admin_rule.open_typeIS菜单打开方式:tab选项卡,link链接,iframeIframe;COMMENTONCOLUMN__PREFIX__admin_rule.urlIS菜单URL;COMMENTONCOLUMN__PREFIX__admin_rule.componentIS菜单组件路径;COMMENTONCOLUMN__PREFIX__admin_rule.keepaliveIS缓存:0关闭,1开启;COMMENTONCOLUMN__PREFIX__admin_rule.extendIS扩展属性:add_route_only只添加为路由,add_menu_only只添加为菜单;COMMENTONCOLUMN__PREFIX__admin_rule.remarkIS备注;COMMENTONCOLUMN__PREFIX__admin_rule.weighIS权重;COMMENTONCOLUMN__PREFIX__admin_rule.statusIS状态:0禁用,1启用;COMMENTONCOLUMN__PREFIX__admin_rule.update_timeIS更新时间;COMMENTONCOLUMN__PREFIX__admin_rule.create_timeIS创建时间;我手动改了改让 CC 基于我修改后的internal/middleware/admin_auth.go重新整理管理员权限模型结果 的文件错了这 的是中间件我勒个豆直接给我整出了admin_group和admin_group_access表的迁移数据然后把admin控制器里边又查了admin_group登录用户的权限等等逻辑。我只是想根据迁移 SQL 更新一下AdminRule模型而已等了半天才发现它走了歪路还浪费大量 tokens…最后生成的AdminRule模型如下// AdminRule 菜单和权限规则模型typeAdminRulestruct{IDuintgorm:comment:ID;primarykey;autoIncrement json:idPid*uintgorm:comment:上级规则 json:pidTypestringgorm:comment:规则类型:dir规则目录,menu菜单项,node权限节点;type:varchar(50);not null;default: json:typeTitlestringgorm:comment:规则标题;type:varchar(50);not null;default: json:titleNamestringgorm:comment:规则名称;type:varchar(50);not null;default: json:namePathstringgorm:comment:菜单路由路径;type:varchar(255);not null;default: json:pathIconstringgorm:comment:菜单图标;type:varchar(50);not null;default: json:iconOpenTypestringgorm:comment:菜单打开方式:tab选项卡,link链接,iframeIframe;type:varchar(50);not null;default: json:open_typeURLstringgorm:comment:菜单URL;type:varchar(255);not null;default: json:urlComponentstringgorm:comment:菜单组件路径;type:varchar(255);not null;default: json:componentKeepaliveuint8gorm:comment:缓存:0关闭,1开启;not null;default:0 json:keepaliveExtendstringgorm:comment:扩展属性:add_route_only只添加为路由,add_menu_only只添加为菜单;type:varchar(50);not null;default: json:extendRemarkstringgorm:comment:备注;type:varchar(255);not null;default: json:remarkWeighintgorm:comment:权重;not null;default:0 json:weighStatusuint8gorm:comment:状态:0禁用,1启用;not null;default:1 json:statusUpdateTime time.Timegorm:comment:更新时间 json:update_timeCreateTime time.Timegorm:comment:创建时间 json:create_time}func(AdminRule)TableName()string{returnadmin_rules}