Sequelize v3 - 如何将hasMany关系的默认值设为空列表?

时间:2016-10-31 05:15:56

标签: javascript associations sequelize.js model-associations

我使用Sequelize作为我的ORM。我有一个简单的onDisconnect模型如下。 User User hasManycomments CommentbelongsTo

user(修剪为相关内容)

models/user.js

const model = (sequelize, DataTypes) => { const User = sequelize.define('User', { name: { type: DataTypes.STRING } }, { classMethods: { associate: function(models) { User.hasMany(models.Comment, {as: 'comments'}) } } } ) return User } module.exports = model (也修剪过)

models/comment.js

我已经创建了一个测试如下(为简洁而修剪)

const model = (sequelize, DataTypes) => {

  const Comment = sequelize.define('Comment', {
      text: {
        type: DataTypes.TEXT
      }
    }, {
      classMethods: {
        associate: function(models) {
          Comment.belongsTo(models.User, {as: 'author'})
        }
      }
    }
  )

  return Comment
}

module.exports = model

导致

describe('create user given simple valid data', () => {
  const userData = {
    name: 'test'
  }

  it('creates a user', (done) => {
    User.create(userData, {
      include: [{model: models.Comment, as: 'comments'}]
    }).then((user) => {
      const userJS = user.get({plain: true})
      expect(userJS).to.have.property('name')
      expect(userJS).to.have.property('comments')
      done()
    }, done)
  })
})

如果我指定我的Unhandled rejection AssertionError: expected { Object (name, ...) } to have a property 'comments' ,那么

userData

测试通过就好了。

我如何告诉Sequelize只将一个空的评论列表作为默认值?

1 个答案:

答案 0 :(得分:0)

实际上,此功能不是模型创建的一部分。

它与获取数据时的查询有关。 您可以在findAll的include语句中使用nested:true选项。

User.findAll({ 
    include: [{ 
    model: Comment, 
    as: "comments", 
    nested: true 
}]});

来源:http://docs.sequelizejs.com/manual/models-usage.html#nested-eager-loading