gpt4 book ai didi

javascript - 挤压 : how to use junction table to create other associates?

转载 作者:行者123 更新时间:2023-12-03 22:39:37 30 4
gpt4 key购买 nike

我有三个基本表 A、B 和 C。A 和 B 有多对多关系。所以我使用 A_B 的连接表。 C 与 A_B 具有一对多关系。这就是它们在使用 sequelize 时的定义方式。

A.associate = function(models) {
A.belongsToMany(models.B, {
through: 'A_B',
as: 'Bs',
foreignKey: 'a_id'
});
};

B 相似,那么 C。
C.associate = function(models) {
C.hasMany(models.A_B, {
as: 'ABs',
foreignKey: 'c_id'
});
};

但是当我运行它时,我收到以下消息。
Error: C.hasMany called with something that's not a subclass of Sequelize.Model

看起来 sequelize 无法将 A_B 识别为有效。有什么办法解决吗?

谢谢。

最佳答案

如果你想获取 A_B 表的行,那么你需要创建一个代表它的模型(当你在 A 中用 through 声明关联时,它不会在 sequelize 中“创建”)。

假设:

  • 你的表 A_B 有三列 a_id, b_id 和 c_id

  • 代码应该类似于:
    const A = sequelize.define('A', {
    id: Sequelize.STRING
    })
    A.associate = function(models) {
    A.belongsToMany(models.B, {
    through: {
    model: 'A_B',
    },
    as: 'Bs',
    foreignKey: 'a_id',
    otherKey: 'b_id'
    });
    }

    const B = sequelize.define('B', {
    id: Sequelize.STRING
    })

    B.associate = function(models) {
    B.belongsToMany(models.A, {
    through: {
    model: 'A_B',
    },
    as: 'As',
    foreignKey: 'b_id',
    otherKey: 'a_id'
    });
    }

    const A_B = sequelize.define('A_B', {
    a_id: Sequelize.STRING,
    b_id: Sequelize.STRING,
    c_id: Sequelize.STRING
    })

    const C = sequelize.define('C', {
    id: Sequelize.STRING
    })
    C.associate = function(models) {
    C.hasMany(models.A_B, {
    as: 'ABs',
    foreignKey: 'c_id'
    });
    }

    关于javascript - 挤压 : how to use junction table to create other associates?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51446990/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com