首页 > 解决方案 > Sequlize 'as' 和 'foreign key' 属性如何影响关系?

问题描述

我正在学习sequlize。

我正在使用迁移机制开发系统。这意味着我使用迁移添加外键。

我有两个模型,即bannersrestaurants

一间餐厅可以有许多条幅。一个横幅属于一家餐馆。

所以在我的餐厅模型中

restaurants.associate = function (models) {
    restaurants.hasMany(models.banners, {
      foreignKey: 'restaurant_id'
    })
  }

在我的横幅模型中

banners.associate = function (models) {
    banners.belongsTo(models.restaurants,{foreignKey: 'restaurant_id'});
    banners.belongsTo(models.regions,{foreignKey:"region_id"});
  };

当我尝试这个查询时

const pending = await db.banners.findAll({
            where: {
                status: 'pending'
            },

            include: ['restaurants']

        })

它给了我错误

与别名“restaurants”的关联不存在

我的问题是为什么会发生这种情况?as以及属性如何foreignKey影响关联?我们可以在哪里跳过这些属性?

标签: sequelize.js

解决方案


在您的情况下,您只需要定义别名:

// in your model file
banners.belongsTo( models.restaurants , { as: 'restaurants' , foreignKey: 'restaurant_id'});

//from your api
db.banners.findAll({
    where: {
        status: 'pending'
    },
    include: ['restaurants'] // <--- If name is string then it should be alias name

});

如果您不想定义别名,也可以像这样使用它

include: [models.restaurants] // <--- you can also use this

推荐阅读