Sequelize:A与B

时间:2018-04-18 16:30:42

标签: database express associations sequelize.js

我已阅读Stack Overflow和Sequelize网站上的所有文档。

我的数据库具有正确的外键。我将IMAGES模型与CREATION相关联:

Images.associate = (models) => {
        Images.belongsTo(models.Creations, {
        foreignKey: 'idImagesCreation',
        sourceKey: 'id',
        onDelete: 'CASCADE',
    });
};

在我的控制器中,我这样称呼

 list(req, res) {
    return Creations
      .findAll({
          raw: true,
          include: [{
              model: Images
          }] 
       }).then(creations =>{ etc...

我在我的模型和控制器中尝试使用“as”包括{as:'Images'},但仍然有同样的错误:

SequelizeEagerLoadingError:图片与Creations无关!

我对“(模型)”参数有疑问,在哪里关联查找模型? 我将它们导入models文件夹的索引文件中。这够了吗? 或者错误来自其他来源?

1 个答案:

答案 0 :(得分:0)

那是因为Sequelize说这些模型没有这种关联。您拥有从ImagesCreations的关联,但不是从CreationsImages,因此您需要做的就是建立这样的关联:

Creations.associate = (models) => {
    Creations.hasOne(models.Images, { as: 'ImagesCreation' });//hasMany depending on your relationship
};

这会在Images上创建一个名为ImagesCreationId的FK,现在您可以进行第二次关联。

Images.associate = (models) => {
    Images.belongsTo(models.Creations);
};

现在Sequelize以你想要的方式了解这种关联。

我建议您进行迁移,这样您就可以进行正确的关联。