SuperAPI AI 工具集

perfex-database

数据与分析

查看项目

更新于 10-16 05:46

技能介绍

用途:为 Perfex CRM 模块设计自有数据表与迁移,使模块表与核心表干净集成,并处理已提交 install.php 与生产库之间的结构漂移。

主要能力: 表命名采用 tbl<module><entity>,代码中始终用 db_prefix(),因前缀可配置。 外键陷阱:核心表主键为有符号 INT(非 UNSIGNED),常见目标包括 tblcontacts.id、tblstaff.staffid、tblclients.userid、tblinvoices.id、tblcontracts.id、tblleads.id;类型或排序规则不匹配会导致约束创建失败或被静默跳过。 字符集统一 utf8mb4 / utf8mb4_unicode_ci,引擎 InnoDB。 被索引列用 VARCHAR(191) 而非 255,避免 utf8mb4 索引键 767 字节上限。 install.php 建表前用 if (!table_exists(...)) 保证幂等,激活钩子可能重复执行。 迁移使用 Perfex 模块迁移系统(App_module_migration,2.3 起):文件名形如 110_version_110.php,类名 Migration_Version<n>,目标版本取模块头部 Version 去掉点号;编号必须连续,否则 version() 报 migration_sequence_gap;每次 Version 递增都需对应迁移文件,纯代码发布可写空 up()。已安装版本存于 tblmodules.installed_version,升级需管理员在 Setup → Modules 点击 Upgrade Database,部署本身不生效。 up() 内仍需 field_exists()/table_exists() 守卫,保证可重复执行。 dbforge->add_column() 会自动加前缀,勿再传 db_prefix();而 list_fields() 与 field_exists() 需手动传前缀。 查询优先用查询构造器自动参数化,原生 SQL 用 escape() 或绑定参数。 一次性令牌或加锁场景用先更新后检查 affected_rows() 的原子写法。 动态列模式(如按币种定价 rate_currency_{id})通过 list_fields() 检测、dbforge 添加,适合少量管理员维护的变体,高基数维度应改用关联表。 破坏性操作前用 mysqldump 备份目标表。

限制:资料未提供具体价格、平台支持范围或性能数据;版本相关说明来自官方变更日志,示例针对 Perfex CRM 3.4.0 核心源码核对。