sequelize js - eager loading会创建所有字段为null的对象

时间:2015-04-15 22:27:35

标签: node.js sequelize.js

seqeulize model include(eager loading)创建嵌套对象,即使它们在数据库中不存在,也会导致所有字段为null的对象。 例如:

poll.server.model.js

module.exports = function(sequelize, DataTypes) {

    var Poll = sequelize.define('Poll', {
            // fields
        },
        {
            associate: function(models){
                Poll.hasMany(models.Comment, {foreignKey:'poll_id', foreignKeyConstraint: true})
            }
        }
    );

    return Poll;
};

comment.server.model.js

module.exports = function(sequelize, DataTypes) {

    var Comment = sequelize.define('Comment', {
            // fields
        },
        {
            associate: function(models){
                Comment.belongsTo(models.Poll, {foreignKey: 'poll_id'})
            }
        }
    );

    return Comment;
};

这是控制器上的功能(简称)

db.Poll.findAll({include:model:db.Comments}).then(function(polls){
    res.jsonp(polls);
});

当我加载一个包含数据库中存在注释的民意调查时,一切运行良好。问题是,当我加载一个没有注释的民意调查时,我仍然有一个注释数组,包含一个所有字段为null的单个对象

$$hashKey: "2LA"
comment_date_inserted: null
comment_date_updated: null
comment_fingerprint: null
comment_id: null
comment_parent_id: null
comment_text: null
comment_text_raw: null
comment_title: null
comments: Array[1]
poll_id: null
poll_option_id: null
user: Array[1]
user_id: null

对于我做的任何其他热切加载也是如此(注意注释:数组[1] - >子注释(不存在)和user:Array [1] - >所有字段为空的对象)

我的问题是: 1 - 为什么会发生这种情况? 2 - 我做错了什么/我在包含部分做错了什么? 3 - 我是否可以在include中有条件,例如,如果所有字段都为null,则不包括?

0 个答案:

没有答案