以下是有关在决定是否使用sequelize(sequelize project site)支持的功能之前要解决的一些问题:
Crowd
对象的关系为Crowd.hasMany(Person)
。您可以通过执行crowd.getPersons()
来获取所有关联的人,但是是否可以选择其中的一个子集,例如crowd.getPersons({where: { age: 30 }})
呢? Crowd
对象,关系为Crowd.hasMany(Person)
,而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用于 super duper批处理。尽管如此,每个命令都会分开执行。
2 .:使用QueryChainer,仅在一切正常的情况下才触发成功事件。如果发生一个或多个错误,则会触发错误。 bound方法的第一个参数将是一个错误数组。
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并:
Person = sequelize.define('Person', {foo:Sequelize.STRING}, {
instanceMethods: {
fullname: function() {
return this.firstName + ' ' + this.lastName
}
}
})