我使用Sequelize作为我的ORM。我有一个简单的onDisconnect
模型如下。 User
User
hasMany
和comments
Comment
和belongsTo
。
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只将一个空的评论列表作为默认值?
答案 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