mysql - Sequelize 4 - eagger 加载时属于多对多插入问题

标签 mysql node.js sequelize.js sequelize-cli

大家好,我有这两个模型:

const media = sequelize.define('media', {
              id: { type: Sequelize.UUID, primaryKey: true, defaultValue: Sequelize.UUIDV4 },
              name: { type: Sequelize.STRING, allowNull: false, unique:'compositeIndex' },}, { freezeTableName: true });

const mediaGenre = sequelize.define('mediaGenre', {
                  id: { type: Sequelize.UUID, primaryKey: true, defaultValue: Sequelize.UUIDV4 }}, { freezeTableName: true, name: { plural: 'mediaGenre' } });

这两个关系:

media.hasMany(mediaGenre, as: 'mGenre');
mediaGenre.belongsTo(media);

media.belongsToMany(genre, { through: mediaGenre });
genre.belongsToMany(media, { through: mediaGenre });

当我想创建媒体时,我会这样做:

MediaModels.media.create(
            {name: 'Hulk',
            mediaGenre: [
            { genreId: '021baab5-7fc6-4b06-aca5-e4b1ed1f3ce4' },
            { genreId: '03f069a4-dc52-4ab5-82d3-6bcd67d2d29e' }]},
            {
                include: [
                    {model: MediaModels.mediaGenre, as: 'mGenre'}
                ]
            }
        );

这些一直与sequ​​elize 3一起使用,最近我更新到sequelize 4.4.2,它没有抛出错误,但表mediaGenre尚未填充。

有什么想法可能是错误吗?

最佳答案

您在引用关联后是否尝试过同步?我遇到了这个问题,当我调用同步时(强制为 false,如果您不想删除架构并重新创建,这一点很重要),连接表被创建。

如果您使用sequelize-cli,还请注意,在此版本中,不再支持classMethods。相反,您应该直接向您的模型添加一个名为 Associate 的方法,该方法将在您的 models/index.js 中调用。

关于mysql - Sequelize 4 - eagger 加载时属于多对多插入问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45601174/

相关文章:

php - 需要一些关于计数和计算行总和的指导。

node.js - 使用 Node.js ssh2 模块模拟 ssh 的 ProxyCommand

javascript - 如何在字符串中使用nodejs查找字符实体

postgresql - Sequelize.js - 如何在没有原始 SQL 的情况下创建重要的关联?

mysql - Sequelize - 如何在一个种子文件中创建多个记录

php - 查询列中的多个值

mysql - 表中要保留多少列? - MySQL

sql - MySQL 在特定时间间隔查询行

node.js - 如何在 Alexa Skill lambda 函数中正确指定 SSML?

node.js - 未处理的PromiseRejectionWarning : SequelizeDatabaseError: Unknown column 'model.coulmn_name' in 'where clause'