Sequelize .update() 不使用正确的位置并更新所有行
Posted
技术标签:
【中文标题】Sequelize .update() 不使用正确的位置并更新所有行【英文标题】:Sequelize .update() not using the correct where and updates all rows 【发布时间】:2022-01-21 12:53:11 【问题描述】:我正在尝试创建批准命令。 关于它的一切都应该正常工作,但它永远无法正常工作。 我已将我的数据库更改为首先具有“id”,但它仍然更喜欢更新“user”。
我试过让我的代码只是;但这从未成功。即使我在其他任何地方都使用它。
await ticketApproval.update(status: 1);
我查看了文档和其他 *** 问题和答案。 目前还没有任何效果,但据我所知,我的代码中没有任何内容应该告诉它更新 "user" id。因为我只告诉它搜索票 "id" 和 "server" id 感觉就像完全忽略了 Where。
代码
控制台
测试样本
【问题讨论】:
请不要将代码片段作为图片发布。很难在答案中使用或修改它们 【参考方案1】:您显然将记录实例的update
方法与模型的静态update
混淆了。
只有静态update
具有where
选项,因为它使用传递的条件更新数据库中的多个记录,而实例update
方法使用某个记录的主键值来使用传递的值更新它。
比较:
// here we have a model instance for a concrete record
const ticketApproval = await Ticket.findOne(
where:
id: ticketToApprove
)
// by calling the instance `update` we always update this concrete record only
// using a primary key value condition, see a primary key field defined in a model
await ticketApproval.update( status: 1 );
与
// by calling the static `update` we update all records that satisfy the indicated conditions
await Ticket.update( status: 1 ,
where:
id: ticketToApprove
);
【讨论】:
我不太确定,但我试过await ticketApproval.update( status: 1 );
这实际上是我使用的第一件事,因为这是我之前处理所有事情的方式,但仍在更新用户 ID,而不是工单 ID。我什至删除了服务器 ID,但仍然有同样的问题。我也使用它,因为我想确保人们不会在该服务器之外批准票证。我想我也可以为此做一个 if 语句。
ticketApproval
是 concrete
记录的一个实例,因此其 update
方法将始终使用主键字段及其在 WHERE 条件下的值更新此唯一记录
如果你想更新where
选项中指示条件的几条记录,只需更新静态Ticket.update
方法
这就是问题所在,不管我是否使用ticketApproval.update( status: 1 );
它仍然会更新用户。我找不到导致它在用户上更新的原因,因为它似乎忽略了“where”的选项
好吧,我想我会使用 Ticket.update
上的 Where 来代替,因为这确实对我有用以上是关于Sequelize .update() 不使用正确的位置并更新所有行的主要内容,如果未能解决你的问题,请参考以下文章
Sequelize:无法连接到 SQL Server - 传递的端口不正确
如何在 NestJs 框架中使用 postgres 和 sequelize 正确定义 DTO 对象