以下是关于sequelize支持的功能的一些问题(续集项目网站 http://sequelizejs.com)在决定是否使用它之前我想澄清一下:
链接(效率):当链接多个查询时,这些查询是收集到对数据库的一个请求中(作为一批操作),还是每个请求单独发送?
链接(成功/错误):链接多个查询时,何时发出成功事件以及错误时会发生什么?仅当以下情况时才会发出“成功”all操作成功了吗?如果出现错误,是否会回滚所有操作(即链式操作是否被视为事务)
过滤关联:说一个Crowd
对象具有关系Crowd.hasMany(Person)
。您可以通过执行来获取所有关联的人crowd.getPersons()
,但是是否可以选择其中的子集,例如crowd.getPersons({where: { age: 30 }})
?
获取通过两个或更多步骤相关的关联对象:说Crowd
对象作为关系Crowd.hasMany(Person)
and Person
有关系Person.hasMany(Pet)
。是否有可能通过执行类似的操作来获得人群中的所有宠物crowd.getPersons().getPets()
,如果是这样,它会作为多个请求发送到数据库,还是只是一个请求?
-
“深层”对象:我想将一个人定义为对象:
sequelize.define('Person', {
name: {
first: <a string>,
last: <a string>
}
});
这是允许的吗? (请注意,名称不会是数据库表的列,但第一个和最后一个会是)
-
“计算”对象:是否可以向对象添加一个根据对象的其他字段计算得出的字段?例如:
sequelize.define('Person', {
name: {
first: <a string>,
last: <a string>,
full: <name.first + ' ' + name.last> // <-- this field
}
});
所以这样name.full
字段实际上并不存储在数据库中(这是浪费空间),而是只是根据其他两个计算出来的?
1.:您可以使用 QueryChainer 进行超级批量处理。尽管如此,每个命令都将单独执行。
2.:使用QueryChainer,只有在一切正常的情况下才会触发成功事件。如果发生一个或多个错误,则会触发错误。绑定方法的第一个参数将是一个错误数组。
3.:嗯,我不是 100% 确定,但恕我直言,它还不受支持。
4.:不,不可能,但更复杂且不那么花哨:
crowd.getPeople().success(function(people) {
people.forEach(function(person){
person.getPets().success... // you have to collect them on your own
})
})
5.:不。但我也不明白你为什么要这样做。
6.:是的,检查一下http://sequelizejs.com/docs/1.7.8/models#expansion-of-models http://sequelizejs.com/docs/1.7.8/models#expansion-of-models and:
Person = sequelize.define('Person', {foo:Sequelize.STRING}, {
instanceMethods: {
fullname: function() {
return this.firstName + ' ' + this.lastName
}
}
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)