数据库

很多时候我们的FastAdmin插件都需要使用到数据库,此篇幅为你解答如何在FastAdmin插件中使用数据库功能。

MQfVFwPRpinXvYAJKyDYwDLXhOS9pUCwyfdTaA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

设计规范

TDHVZABYogQfEqSnJknXClVWxQzOo3+D5QhOWg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

我们在设计插件数据库时建议统一设计规范,因为更好的设计规范能更好的让我们的用户更快速的掌握我们开发者的设计思想。

gaURBQXbWivTOIwp1nOtyicIqrkqFuwyl8cLiw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  1. 表名和字段名全小写,只允许出现a-z_这几种字符,且不能有拼音,只能为英文单词
  2. disjclwZehPpADak7ipkrRemNlfujxUSCQl/xg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  3. 存储引擎统一使用innodb引擎
  4. DtrohKwjfAsOqBkJW0eLkYOmH668fM31eDw9Tg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  5. 字符集统一使用utf8mb4,排序规则使用utf8mb4_general_ci
  6. jPZVlQHhvymwzILN8esTk42o9FC7MB5pMnqECA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  7. 关联字段统一使用_id结尾,如user_idtask_id(任务表名为task),item_id(物品表名为item), 当为father_idparent_idpidprev_id等字段时表示和当前表主键进行关联,当为task_idsuser_ids时表示一个集合,以半角逗号进行分隔(非JSON)
  8. iTXDWzysNFYeAuGpjC+/J5LPsDGxV6Vsa4gs4A==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  9. 时间统一使用Unix时间戳格式, 秒级, 长整型, 长度16,且必须以time结尾, 如createtimeupdatetime, paytimeexpiretime
  10. LaPXejnuYsJArvOkuRm+YhD1wgze9mNj3AGZaQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  11. 时长统一使用秒格式, 整型, 长度10,且必须以seconds结尾,如onlinesecondstodayonlineseconds
  12. BioGklOgKnmwhfZtGzOBii++2u6RBlqsTL3aMg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  13. 表主键必须为id,主索引
  14. bkJUWGimXaPFfOplz298A1PyyxSuX0uSNmK6uQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  15. 表名和字段名统一使用英文名称,不允许出现中英混搭的情况出现
  16. hHziRMIcfneErYZsGHppXD4ONDoEg99l/UGKbA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  17. 日志表统一为模块名加上_log进行命名
  18. HVuMnGylLwdbjehCGeBbYep75v2pcezwwzVjNQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  19. 字段内容为json数据时,以data进行结尾,比如itemdatarewarddata
  20. NplzLJXcKuUkZBIizuALHl6mWKdLwY60exUo0w==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  21. 当字段为某操作数量时,以nums结尾,比如 buynumssalenums
  22. OQSCisZakTyoLntqPb2lNJpP9kcZDx4B9I2WkA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  23. 当一表出现两个或两个以上会员ID时,user_id表示自己, receiver_user_id表示他人,多人时使用receiver_user_ids,以半角逗号进行分隔(非JSON)
  24. wNvYqFSnJhMTPHzmNCA43vefviYFfX6jR0U82w==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  25. 当出现可数名词字段时,一定要加上字符s,如commentsviews
  26. fGDticvUOBCgNTERvLcE1CDpVL68HTRUdQaMDw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  27. 数据表添加的索引对应的字段长度不建议超过100
  28. boYmekjHJKTRGZPiOOtuKtSZqThX/bgbTxwzkg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

配置文件

vuzxJSVwEXAHfCMedwbu2v2rJWY2mYiC7ZafvA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

在插件目录addons/mydemo目录添加一个install.sql,然后将安装脚本的SQL存放在此文件中。

nrqeKdMFiYJTWtwcRExvNE3mFZNdG9wR5CPtgw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

数据表名规范

IENGqUgdlmucVCXh47jLocC1y6PlwNGSD8rbFQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

插件数据表名必须以插件标识开始,例如:

LhAnINmzHWCJeSfxVC1+jGwjMfDU1R02zq801Q==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
__PREFIX__mydemo_log
__PREFIX__mydemo_item
__PREFIX__mydemo_comment
dMscxngkqBYiOboV37iLRQ4PqNRsE0794Ar2KQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

其中mydemo为你的插件标识,__PREFIX__为数据表前缀。

rEJZXbjOhklnGzwyU5lsb+KsLx+MNVrBrjMuJQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

特殊字段

EbyqPlvLJkXGdVZAj1ybk8kBaecWbXT2r1BBSw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

建议开发者在设计数据库时保留以下字段的设计名称,这样我们能更好的统一不同插件之间的命名规范。

SYzkhieTOHGypucLGAwRCMabn3/bRpc3iPYGbg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
字段        字段名称  字段类型字段说明                                                    
category_id  分类ID    int      关联fa_category表,后台CRUD时会自动生成selectpage组件      
user_id会员IDint  关联fa_user表,后台CRUD时会自动生成selectpage组件      
weigh        权重      int      后台的排序字段,如果存在该字段将出现排序按钮,可上下拖动进行排序
createtime  创建时间  bigint      记录添加时间字段,不需要手动维护                              
updatetime  更新时间  bigint      记录更新时间的字段,不需要手动维护                            
deletetime  删除时间  bigint      记录删除时间的字段,不需要手动维护,如果存在此字段将会生成回收站功能,字段默认值务必为null
status      状态字段  enum    状态标识,如果存在此字段将启用TAB选项卡展示列表          
QEfBpyNcJSFgAIHidehOk8lnYRTsfBrzyuODmg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

安装脚本

xVGMHPlRCfgzhsIkyXcEWOkHb7nBtdcT+P2jEw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

每个插件都可以自带一个install.sql,路径位于addons/mydemo/install.sql,用于在插件安装时,FastAdmin插件系统会自动执行此文件中的SQL,可用于创建数据库,写入相关数据等操作。以下为示例的SQL:

dXrEZTJlwxSRyUeNS8rWbXYD1H2nqLWmTG3crA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
CREATE TABLE IF NOT EXISTS `__PREFIX__mydemo_list` (
  `id` int(10) NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `pid` int(10) DEFAULT NULL COMMENT '父id',
  `title` varchar(100) DEFAULT NULL COMMENT '标题',
  `name` varchar(100) DEFAULT NULL COMMENT '名称',
  `createtime` bigint(16) DEFAULT NULL COMMENT '创建时间',
  `updatetime` bigint(16) DEFAULT NULL COMMENT '更新时间',
  `publishtime` bigint(16) DEFAULT NULL COMMENT '发布时间',
  `deletetime` bigint(16) DEFAULT NULL COMMENT '删除时间',
  `memo` varchar(100) DEFAULT '' COMMENT '备注',
  `status` enum('normal','hidden','rejected','pulloff') NOT NULL DEFAULT 'normal' COMMENT '状态',
  PRIMARY KEY (`id`),
  KEY `pid` (`pid`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4  COLLATE=utf8mb4_general_ci COMMENT='示例表';
tfodNHOnCkVxrEWzjdLp3xk0zd4nY/Q9E+ANTw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

__PREFIX__用于将在执行导入时自动替换为用户数据库配置的表前缀。

PKGANjMyvxTItmaSdQRuOPHws20BBMX/3YilRQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

如果在版本升级时插件表结构需要变更,需要在install.sql追加变更的SQL语句,如

UMbwYWKLZEhjTDnu3PCBhkqTO+Fg1fxXJ15v5w==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
--
-- 1.0.1
-- 添加名称字段name
--
ALTER TABLE `__PREFIX__mydemo_list` ADD COLUMN `name` varchar(255) NULL DEFAULT '' COMMENT '名称' AFTER `title`;
ujIzWdLycXexsnoHrMmLS54cG03TBHamegCWNA==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

同时注意上方的CREATE TABLE IF NOT EXISTS __PREFIX__mydemo_list语句中字段name的创建也需要存在。

pAnDHekaWJjRCGYN35OBDH3MOavV55TgNDuCZw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

如果标准授权版本高级授权版本的表结构不同,还需要参照上方版本升级时插件表结构的处理方式添加ALTER TABLE相关语句,不然会导致标准授权版本升级至高级授权版本时表结构字段丢失。

uJVydAmahlbWYGPk38d0GLMe5acIfIrWgSrwug==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

测试数据

VIQnxFrkjMiJqPHRtpXEByGcWynvXrDF5UV8/Q==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

每个插件可自带一个testdata.sql,用于安装插件成功后导入测试数据,具体文档请参考测试数据章节。

jUBrJYtflWGqLKbQLDOfJO2bJTpROUKzA1N53A==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

常见问题

cTAnajmFqpeGStbr6pkBFGFsbD/YwVvulU+0wQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

如果统计查询中遇到报错this is incompatible with sql_mode=only_full_group_by错误时,请在执行SQL查询前使用以下代码来临时取消sql_mode限制。

jfoVmLnREzaOeZtDr+Vu53lZ21nFuOczc5VVHQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
try {
    \think\Db::execute("SET @@sql_mode='';");
} catch (\Exception $e) {
}
FviOCzEwcyJHsjkLU6jC8AOLt7n2FjmqFHs0fQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。

温馨提示

rEhwqsatJmvbyMKQguhM7gXCv5TDTrbLVD4TCg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  1. 不允许修改框架自带的数据表结构或其它应用插件的数据表结构
  2. vyBWMVCfTQeouLqXej2YEbUC9BMEqzKGsYyHNg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  3. 安装脚本中不能包含DROP TABLE删除表和DELETE FROM删除记录的语句。
  4. ofhxmrVKtIqpvzwMWkrUb9AuPR/9bqHdY6mbzw==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  5. 如果需要测试数据,请参考测试数据章节。
  6. lkWSTsvXnrCZIQUDzJhgAQBca/HSoUWw32bTRg==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  7. 日期时间如使用时间戳,请使用bigint(16)类型,且设置默认为NULL
  8. nVIJZWymGXqYMjhC4sJSXUonx6IK9/kwYM325Q==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  9. install.sql中的SQLCREATE TABLE语句前不能存在任何空格。
  10. RTqUoCdVKebauJjx/ACKz1DksraMYU3AQ2Oe1A==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
  11. 不允许在Model模型行为中执行数据库DDL操作
  12. aeSLYqxNnIQTuBMtFQrKV3iDNVcmfQwkmL9RfQ==著作权归作者所有,未经许可,禁止转载、复制此文档的任何内容。
文档最后更新时间:2025-11-07 17:24:13
著作权归应用插件开发者所有,未经许可,禁止转载、复制此文档的任何内容。

文档
目录

深色
模式

切换
宽度