更新Sequelize模型时,失败并返回与我提供的表名称不同的表名吗?

时间:2018-12-27 10:29:49

标签: node.js postgresql sequelize.js

我正在运行PostgreSQL 11,并尝试使用Sequelize更新其表项之一。

我的NodeJS代码:

require('env2')('.env');
const Sequelize = require('sequelize');

const sequelize=new Sequelize(process.env.database,process.env.username,process.env.password,{
    dialect:'postgres'
});

const Agent=sequelize.define('agent');
updateValues={available:false};
Agent.update(updateValues,{where:{phonenumber:'+18005551212'}}).then(result=>{console.log(result)});

agent具有以下结构:

id primary key serial,
phonenumber varchar(100),
available boolean

运行NodeJS代码时,出现此错误:

Executing (default): UPDATE "agents" SET "updatedAt"='2018-12-27 10:16:54.504 +0
0:00' WHERE "phonenumber" = '+18005551212'
Unhandled rejection SequelizeDatabaseError: relation "agents" does not exist

为什么此更新失败?当我在sequelize.define(agent)中将表名提供为“ agent”时,我不明白为什么该错误在谈论关系“ agents”。

当我按如下方式使用原始SQL时,更新成功:

sequelize.query("update agent set available=false where phonenumber='+18005551212'").then(result=>{
    console.log(result);
});

1 个答案:

答案 0 :(得分:1)

默认情况下,sequelize创建一个表并使用其定义名称的复数形式,因此,当您执行sequelize.define('agent')时,它实际上创建的表的名称为agents。如果您不想自然地更改表名,则可以在序列化定义中使用freezeTableName: true选项。可以在this答案中找到更多信息。请参阅Sequelize配置doc