SequelizeDatabaseError: 操作符不存在 uuid = integer

Lui*_*los 6 javascript postgresql node.js sequelize.js

我正在尝试根据 UUID 连接两个表(我也有 id),这些表有一些困难的关系......

当我运行查询时,出现错误。

第一个表叫做users,他的 UUID 叫做registry_uuid 第二个表beneficiaries但是这个表有两个 UUID,uuid_beneficiaryuuid_benefactor

为什么?因为第一个表有一个列user_type_id,通过这个我们可以知道是用户受益人还是受益人。而第二个表是要知道哪些用户是相关的。

示范用户

  const User = sequelize.define('users', {
registry_uuid: {
  type: Sequelize.UUIDV4,
  defaultValue: Sequelize.UUIDV4,
  allowNull: false
},
user_type_id: {
  type: Sequelize.INTEGER,
  defaultValue: 1,
  allowNull: false
}
Run Code Online (Sandbox Code Playgroud)

}

示范受益人

  const Beneficiary = sequelize.define('beneficiaries', {
uuid_benefactor: {
  type: Sequelize.UUIDV4,
  defaultValue: Sequelize.UUIDV4,
  allowNull: false
},
uuid_beneficiary: {
  type: Sequelize.STRING,
  defaultValue: Sequelize.UUIDV4,
  allowNull: false
},
created_at: {
  type: Sequelize.DATE,
  defaultValue: Sequelize.NOW
},
disassociation_date: {
  type: Sequelize.DATE,
  defaultValue: null
}
Run Code Online (Sandbox Code Playgroud)

}

询问

  async function getBenefactorOfBeneficiary (benefactorUuid, arrayAttributes) {
arrayAttributes = arrayAttributes || ['registry_uuid', 'name', 'last_name', 'picture']

return UserModel.findOne({
  where: {
    registry_uuid: {
      [Op.eq]: benefactorUuid
    }
  },
  include: [{
    model: BeneficiaryModel,
  }],
  attributes: arrayAttributes,
  raw: true
})
Run Code Online (Sandbox Code Playgroud)

}

关系

UserModel.hasMany(beneficiaryModel, {foreignKey: 'uuid_benefactor'})
Run Code Online (Sandbox Code Playgroud)

beneficiaryModel.belongsTo(UserModel, {foreignKey: 'registry_uuid'})

我期望输出:

例子:

{
  "name": "string",
  "lastName": "string",
  "picture": "string",
  "created_at" "string"
}
Run Code Online (Sandbox Code Playgroud)

显然我修改了控制器中的响应

Emr*_*mre 1

您应该首先检查您所包含的模型及其 ID 类型。它们必须具有相同的类型。除此之外,假设我们有用户和角色模型。每个用户只能拥有一个角色,一个角色可以由多个用户使用。在这种情况下,如果关联写错了,就会出现此错误。

错误版本:

// Under the user model associations 
user.hasOne(models.role, { foreignKey: "roleId" });
// this will try to compare your userId with roleId of Role table

// Under the Role model associations 
role.hasMany(models.user, { foreignKey: "roleId" });
Run Code Online (Sandbox Code Playgroud)

正确的版本应该是这样的:

// Under the user model associations 
user.hasOne(models.role, { foreignKey: "roleId" });
// this will try to compare your roleId from User model with roleId of Role table

// Under the Role model associations 
role.hasMany(models.user, { foreignKey: "roleId" });
Run Code Online (Sandbox Code Playgroud)

如果您需要更多详细信息,请阅读https://sequelize.org/master/manual/assocs.html