Prisma:在createPet Mutation中用count校验宠物数量失败求助
解决createPet Mutation的宠物数量限制问题
我来帮你搞定这个问题!你想在用户创建第6只宠物时抛出错误,但当前的count查询没生效对吧?咱们一步步来排查和解决:
首先,排查count查询的写法问题
你当前的代码const petsCount = await db.pets({ where: { owner: user.id }, }).count();可能存在ORM调用方式的问题——不同的数据库工具(比如Prisma、Sequelize)对count的调用逻辑不一样。
比如如果用的是Prisma,正确的count调用应该是直接在模型上调用count方法,而不是先查询再链式调用:
// 正确写法(Prisma) const petsCount = await db.pet.count({ where: { owner: user.id } // 这里要确认你的宠物模型里关联用户的字段名是owner还是ownerId });
如果用的是Sequelize,写法是这样的:
// 正确写法(Sequelize) const petsCount = await Pet.count({ where: { ownerId: user.id } });
完整的createPet Mutation示例
下面是一个完整的、能生效的Mutation代码示例(以Prisma为例),包含数量判断和错误抛出:
async function createPet(parent, args, context, info) { // 先确认用户已登录 const currentUser = context.currentUser; if (!currentUser) { throw new Error('请先登录后再创建宠物'); } // 查询用户已拥有的宠物数量 const petsCount = await context.db.pet.count({ where: { owner: currentUser.id } }); // 判断是否超过5只的限制 if (petsCount >= 5) { throw new Error('每个用户最多只能创建5只宠物哦'); } // 创建新宠物并关联用户 const newPet = await context.db.pet.create({ data: { name: args.name, type: args.type, owner: { connect: { id: currentUser.id } } } }); return newPet; }
容易踩的坑
- 字段名错误:一定要确认宠物模型中关联用户的字段是
owner还是ownerId(外键通常会带Id后缀),字段名写错的话查询结果永远是0,自然不会触发错误。 - 异步逻辑顺序:确保count查询是在创建宠物之前执行的,不然会先创建再判断,就失去限制意义了。
- 权限验证:别忘了先验证用户是否登录,避免未登录用户绕过限制。
内容的提问来源于stack exchange,提问作者Le garcon
相关产品推荐
相关产品推荐

