在nodejs中使用sequalize连接间接表

问题描述 投票:0回答:1

表格定义如下:

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!

node.js sequelize.js
1个回答
0
投票

要使用关联,通常需要成对定义它们,例如

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

© www.soinside.com 2019 - 2024. All rights reserved.