确定“ as”和“外键”属性如何影响关系?

时间:2018-08-21 06:29:52

标签: sequelize.js

我正在学习连续化。

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

我有两个模型,分别是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”的协会不存在

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

1 个答案:

答案 0 :(得分:1)

在这种情况下,您需要定义别名:

// 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