使用Prisma 3.14修改Schema字段类型后触发P2032错误求助
解决Prisma 3.14中字段类型从int改string后的P2032错误
问题背景
将Schema中campaign_id属性从int修改为string后,执行prisma.models.findMany()时触发以下错误:
PrismaClientKnownRequestError: Invalid `prisma.models.findMany()` invocation in export const getAllModels = async () => {const resUnparsed = await prisma.models.findMany( Error converting field "campaign_id" of expected non-nullable type "String", found incompatible value of "9156". { code: 'P2032', clientVersion: '3.14.0', meta: { field: 'campaign_id', expected_type: 'String', found: '9156' } }
错误原因
仅修改Prisma Schema的字段类型不完整:
- 数据库中
campaign_id字段的实际类型仍为int,未同步更新为字符串类型 - 现有数据存储的是数字值(如
9156),而Prisma客户端已按照Schema期望读取字符串类型,导致类型转换冲突
解决步骤
同步数据库字段类型
使用Prisma Migrate生成迁移文件并执行,将数据库字段类型更新为字符串:npx prisma migrate dev --name change_campaign_id_to_string也可手动在数据库中修改字段类型(例如MySQL用
ALTER TABLE models MODIFY COLUMN campaign_id VARCHAR(255) NOT NULL;,PostgreSQL用ALTER TABLE models ALTER COLUMN campaign_id TYPE TEXT;)。转换现有数据为字符串类型
执行SQL语句将数据库中已有的数字值转换为字符串:-- 适配多数数据库的通用示例,可根据数据库类型调整语法 UPDATE models SET campaign_id = CAST(campaign_id AS VARCHAR);重新生成Prisma客户端
确保客户端代码与最新Schema一致:npx prisma generate验证查询
再次执行getAllModels函数,确认错误已解决。
内容的提问来源于stack exchange,提问作者Shayro
相关产品推荐
相关产品推荐

