sequelize.js如何通过第3表关联?

时间:2015-04-14 16:03:21

标签: node.js sequelize.js

我有3个模型,民意调查,类别和poll_to_category。

poll.server.model.js

module.exports = function(sequelize, DataTypes) {

    var Poll = sequelize.define('Poll', {
            poll_id:{type:DataTypes.INTEGER,primaryKey:true}
        },
        {
            associate: function(models){
                Poll.hasOne(models.Caetgory, {through:models.PollToCategory)
            }
        }
    );

    return Poll;
};

category.server.model.js

module.exports = function(sequelize, DataTypes) {

    var Category = sequelize.define('Category', {
            category_id:{type:DataTypes.INTEGER, primaryKey:true}
        },
        {
            associate: function(models){
                Category.hasMany(models.Poll, {through:models.PollToCategory)
            }
        }
    );

    return Category;
};

poll_to_category.server.model.js

module.exports = function(sequelize, DataTypes) {

    var PollToCategory = sequelize.define('PollToCategory', {
            ptc_id:{type:DataTypes.INTEGER,primaryKey:true},
            poll_id:DataTypes.INTEGER,
            category_id:DataTypes.INTEGER
        },
        {
            associate: function(models){
                PollToCategory.belongsTo(models.Poll, {foreignKey:'poll_id'}),
                PollToCategory.belongsTo(models.Category, {foreignKey:'category_id'})
            }
        }
    );

    return PollToCategory;
};

当我尝试查询

db.Poll.findAll({include:db.Category}).then(function(polls,err){
    if (err) return res.status(400).send({message: errorHandler.getErrorMessage(err)});
    res.jsonp(polls);
});

我收到以下错误:

Possibly unhandled Error: ER_BAD_FIELD_ERROR: Unknown column 'category.poll_id' in 'field list'

我尝试使用3之间的belongsTo / hasOne配置但是我得到了上述错误,或者我没有得到任何错误,但我收到了属性'类别' as' null'。我对sequelize.js很新,我不确定如何提出这个问题(术语明智)。

关于上面的表格结构,我怎样才能将类别加载到民意调查?

2 个答案:

答案 0 :(得分:1)

您需要为第三个表名提供别名。像这样:

associate: function(models){
                Poll.hasOne(models.Caetgory, {through:models.PollToCategory, as 'PollToCategory')
        }

但正确的方法是让sequelize创建第三个实体。为此,您需要在别名中插入别名并设置固定的“通过”名称,然后续集为您创建它。

答案 1 :(得分:0)

我知道我参加晚会很晚,但需要澄清的是:您没有3个型号。您有两个模型:PollCategoryPollToCategory是两个模型之间的belongsToMany关联。