Sequelize:条件不适用单数和复数的范围

问题描述

我希望为运行1:1和N:N关系的孩子设置一个有效条件,例如本例1:1

// Find all projects with a least one task where task.state === project.state
Project.findAll({
    include: [{
        model: Task,where: { state: Sequelize.col('project.state') }
    }]
})

仅表名根据关系将名称从“项目”更改为“项目” 在这种情况下,“ project.state”将起作用,但是来自具有N:N关联的模型的请求将产生错误

"invalid reference to FROM-clause entry for table \" project \ ""

条件应为“ projects.state”

如果在每个查询中我都在include中使用“ as:project”,则可以工作,但是如果有人有个好主意。

感谢您的帮助

解决方法

最好的方法是强制sequelize.js使用模型中提到的原始名称,同时在数据库中创建表时,可以使sequelize.js使用给定名称而不是名称的复数

var db_instance = new Sequelize(config.DB.database,config.DB.username,config.DB.password,{
  host: config.DB.host,dialect: config.DB.dialect,define: {
    timestamps: true,freezeTableName: true
  },logging: false
});  

OR

您也可以直接直接告诉Sequelize表名称:

sequelize.define('project',{
  // ... (attributes)
},{
  tableName: 'project'
});

您可以在sequelize.js的Documentation中看到这两种方法