首页 > 解决方案 > Sequelize & mysql:自动添加子句`[tableName].deleted_at IS NULL`

问题描述

在 React/Node 应用程序中使用 mysql + sequelize;

自动添加下面的 where 子句,这搞砸了我的其他 where 子句语句

[tableName].deleted_at 为空

在 nodeJS 控制台中,我可以看到都有这个 where 子句的查询......

尝试重新创建索引,删除此列会引发该字段不可用的错误;

列定义为:

`deleted_at` DATETIME NULL DEFAULT NULL,

标签: mysqlsqlnode.jssequelize.js

解决方案


Sequelize 模型为您提供了一个名为paranoid. 简而言之,它为您提供了该表中每一行的已删除状态,并且在使用 ORM 方法在此模型上处理数据库时,该标志将包含在每个查询中。因此,当您将 paranoid 选项设置为 true 时,deletedAt 列将添加为日期和时间,默认为 null。

MyModel.init({ /* attributes here */ }, {
  sequelize,
  paranoid: true,

  // If you want to give a custom name to the deletedAt column
  deletedAt: 'destroyTime'
});

如果您实际检查原始查询,您会发现WHERE deletedAt IS NULL所有查询都添加到 WHERE 语句中。

您可以在此处从官方 Sequelize 文档中找到更多信息: https ://sequelize.org/master/manual/paranoid.html


推荐阅读