表格定义如下:
const Client = db.define('clients', {
client_id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
}
});
Client.hasMany(Project, {foreignKey: 'project_client_id'});
const Project = db.define('projects', {
project_id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
project_client_id: {
type: Sequelize.INTEGER,
allowNull: false,
}
});
Project.hasMany(Assignment, {foreignKey: 'assignment_project_id'});
const Assignment = db.define('assignments', {
assignment_id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
assignment_status: {
type: Sequelize.ENUM,
values: ['Started', 'In-Progress', 'Closed'],
allowNull: false,
defaultValue: 'Started'
},
assignment_project_id: {
type: Sequelize.INTEGER,
allowNull: false,
}
});
我想查询具有给定 client_id、project_id、tasking_id 或 assignment_status 的所有作业。所有这些查询参数都是可选的。如果没有给出,则必须返回所有作业。在这种情况下如何编写Assignment.findAll的代码?
我尝试在Assignment.findAll中添加include Client,但出现错误Error: SequelizeEagerLoadingError:clients is not linked to assignments!
要使用关联,通常需要成对定义它们,例如
belognsTo/hasMany
:
Client.hasMany(Project, {foreignKey: 'project_client_id'});
Project.belongsTo(Client, {foreignKey: 'project_client_id'});
Project.hasMany(Assignment, {foreignKey: 'assignment_project_id'});
Assignment.belongsTo(Project, {foreignKey: 'assignment_project_id'});
因为一个 Sequelize 模型对其他模型的关联一无所知,即使它作为关联模型传递给
belongsTo/hasMany