You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:41:50