Sequelize HasMany无法正常工作

时间:2016-01-04 18:09:26

标签: node.js orm sails.js sequelize.js

我在sails-hook-sequelize应用中使用sails-hook-sequelize-blueprintssails.js

我有一个名为Site的模型。

module.exports = {

    attributes: {
        id: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        name: {
            type: Sequelize.STRING,
            required: true
        }
    },
    associations: function() {
        Site.hasMany(Templates, {
            as: 'templates'
        });
    }
};

每个网站都有多个Templates与之关联。

module.exports = {

    attributes: {
        id: {
            type: Sequelize.INTEGER,
            primaryKey: true,
            autoIncrement: true
        },
        name: {
            type: Sequelize.STRING,
            required: true
        }
    }
};

我收到错误说

/user/myproject/node_modules/sails-hook-sequelize-blueprints/index.js:362
              var alias = foreign.as || foreign.name || foreign;
                                 ^

TypeError: Cannot read property 'as' of undefined

知道它可能是什么吗?

2 个答案:

答案 0 :(得分:1)

您需要在foreignKey定义中添加hasMany

    Site.hasMany(Templates, {
        as: 'templates',
        foreignKey: 'SiteId'
    });

并将belongsTo关联添加到Templates模型定义:

    Templates.belongsTo(Site) // this will add SiteId to the Templates table

与您的命名保持一致也是一种好习惯 - 模型名称应该是单数(Template而不是Templates),这些关系及其后续方法将更加自我解释。 Sequelize会在有意义的地方复数(即你正在处理许多实例)。

答案 1 :(得分:-1)

如上所述,这是因为您的变量'foreign'未定义,并且您尝试读取未定义的属性。