续集 setter 错误 'invalid input syntax for integer: "[object Object]"'

Sequelize setter error 'invalid input syntax for integer: "[object Object]"'

我正在尝试使用关联 setter 方法将联系人列表关联到客户,但是,它总是抛出错误 'invalid input syntax for integer: "[object Object]"'。

错误中提到的相关查询是:UPDATE "contactperson" SET "refCustomerId"=,"updatedAt"= WHERE "id" IN ('[object Object]')

我就是这样使用 setter:

db.customer.findByPk(customerID, {
            include: [{
                model: db.address,
                as: 'address',
            },{
                model: db.contactoption,
                as: 'contactOptions',
            }, {
                model: db.contactperson,
                as: 'contactPersons',
            }]
        }).then(customer => {
customer.setContactPersons([ { firstName: 'tester', lastName: 'tester', description: 'lorem ipsum' } ]);
});

这是协会:

Customer.hasMany(models.contactperson, {
  foreignKey: 'refCustomerId',
  as: 'contactPersons'
});

知道我做错了什么吗?

您使用 set<ModelName>s 仅更新给定记录的 link 字段。如果您需要创建 contactperson 记录,您需要使用 createContactPerson 而不是 setContactPersons(注意:您不能一次创建多个记录)。

customer.createContactPerson({
  firstName: 'tester',
  lastName: 'tester',
  description: 'lorem ipsum'
});

比较:

const contactPerson = db.contactperson.findById(1);
if (contactPerson) {
  customer.addContactPersons([contactPerson.id]);
}

set<ModelName>s - 用新的现有记录替换旧的 linked 记录 add<ModelName>s - 在旧记录之外添加现有记录 create<ModelName> - 在旧记录之外创建一个新的不存在的记录

hasMany special methods

我使用以下代码设法解决了这个问题:

db.contactperson.bulkCreate([ { firstName: 'tester', lastName: 'tester', description: 'lorem ipsum' } ]).then(newContactPersons => {
    customer.setContactPersons(newContactPersons);
});

这是一种比预期更复杂的方法,但它完成了工作。

正是阿纳托利发布的内容。 我在 TypeScript 上声明了如下方法:

declare addPost: HasManyCreateAssociationMixin<PostClass, 'userId'>;

当我改为:

declare createPost: HasManyCreateAssociationMixin<PostClass, 'userId'>;

一切正常,所以请记住 - 您如何描述非常必要的方法名称。