问题描述
我希望为运行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中看到这两种方法