【问题标题】:Sequelize how to include soft deleted records deletedAtSequelize如何包含软删除记录deletedAt
【发布时间】:2021-03-10 23:54:39
【问题描述】:

我正在尝试添加一个功能来取消软删除用户

Users.update( { deletedAt: null }, { where: { userId: request.params.userId } });

这不能按预期工作,并且不会将记录的 deletedAt 参数更新为 null

当我打开日志记录时,我看到上面的内容,解析为下面的内容

正在执行(默认):UPDATE users SET deletedAt=NULL,updatedAt='2019-03-03 22:53:54' 在哪里 ((deletedAt > '2019-03-03 22:53:54' 或 deletedAt 为空)和 userId = 2174)

似乎更新语句忽略了我要取消删除的项目,因为它已被删除。真是个难题呃..

如何告诉 sequelize 也更新已删除的记录?我尝试添加 paranoid: false 标志,但它似乎不是更新选项中的合法参数

【问题讨论】:

    标签: sequelize.js


    【解决方案1】:

    我想你需要的是paranoid: false

    试试这个:

    Users.update( { deletedAt: null }, { where: { userId: request.params.userId } , paranoid: false  });
    

    options.paranoid

    如果为 true,则只会更新未删除的记录。如果为假,则两者 已删除和未删除的记录将被更新。仅适用于 options.paranoid 对模型是正确的。

    更多详情:DO READ

    【讨论】:

    • 该死!谢谢@Vivek ...在我最初的问题中,我什至写道我尝试过但它不起作用。 TypeScript 告诉我这是一个无效的 UpdateOption 和错误,如果您检查链接到它的文档,甚至没有在 Update 选项下列出偏执……但它在放入时完全按预期工作。也许我的 type def 是错误的版本?不管怎样,谢谢
    • 很高兴来到这里 :)
    • @VivekDoshi 我们尝试这样做以撤消软删除,但看起来原始 sql 显示 deleted_at 不是 set 子句的一部分,即使 paranoid 设置为 true,其他值更新命令似乎正在对软删除对象进行更新。有什么线索说明原因吗?
    【解决方案2】:

    您可以使用Model.restore 方法进行un-soft-deleting。这是支持选项的完整列表的API doc

    例子:

    let { userId } = request.params;
    await User.restore({ where: { userId } });
    

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 2019-06-27
      • 2018-06-20
      相关资源
      最近更新 更多