如何在Strapi 3.6.3(MySQL后端)中将自定义字段设为模型主键(以Account模型的account_number为例)
在Strapi 3.6.3 + MySQL中为Account模型设置自定义主键account_number
我来帮你搞定这个需求!在Strapi 3.6.3里要把account_number设为Account模型的主键,得手动调整模型配置和数据库结构,下面是一步步的操作指南:
1. 修改Account模型的配置文件
找到你的Strapi项目里的./api/account/models/Account.settings.json文件(如果是后台创建的模型,路径基本就是这个),调整字段的主键配置:
- 把默认的
id字段的primaryKey改成false(建议保留这个字段,Strapi内部部分逻辑可能依赖它,不用的话也可以直接删掉) - 给
account_number字段添加primaryKey: true,同时要确保它必填且唯一,避免主键冲突
修改后的配置示例:
{ "connection": "default", "collectionName": "accounts", "info": { "name": "Account", "description": "" }, "attributes": { "id": { "type": "integer", "autoIncrement": true, "primaryKey": false // 取消默认主键 }, "account_number": { "type": "string", "required": true, "unique": true, "primaryKey": true // 设置为自定义主键 }, // 这里放你的其他业务字段,比如username、email等 "username": { "type": "string", "required": true } } }
2. 手动更新MySQL数据库表结构
Strapi的自动迁移工具不会处理主键变更这类操作,所以得手动执行SQL语句。操作前请务必备份数据库!
登录你的MySQL数据库,执行以下SQL:
-- 先移除原来id字段的主键约束 ALTER TABLE accounts DROP PRIMARY KEY; -- 确保account_number字段是非空的(如果之前没设置的话) ALTER TABLE accounts MODIFY account_number VARCHAR(255) NOT NULL; -- 给account_number添加主键约束 ALTER TABLE accounts ADD PRIMARY KEY (account_number);
注意:如果你的account_number是整数类型,把VARCHAR(255)改成INT或对应的类型即可。
3. 重启Strapi服务
修改完配置和数据库后,必须重启Strapi才能让新的模型配置生效。在项目根目录运行:
npm run develop
生产环境的话就用npm run start。
4. 验证配置是否生效
- 打开Strapi后台,创建一个新的Account条目,检查数据库中
accounts表的主键是否已经变成account_number - 也可以通过API创建或查询Account数据,确认系统是否正确使用
account_number作为主键标识
一些注意事项
- 如果你是新建的Account模型,可以先修改好配置文件再启动Strapi,这样数据库表会直接按照你的配置创建,不用手动执行SQL
- 保留
id字段可以避免Strapi内部一些未知的兼容性问题,毕竟很多默认逻辑是基于id设计的 - 如果你的
account_number需要自增,把它的类型改成integer并添加autoIncrement: true即可,但要确保它的唯一性
内容的提问来源于stack exchange,提问作者Mr Singh
相关产品推荐
相关产品推荐

