Ped*_*o A 1 javascript sequelize.js
在使用Sequelize并阅读Sequelize文档时,我观察到模型名称有时以单数形式使用,有时以复数形式使用。通过关联自动添加到模型中的某些方法具有单数形式,而某些具有复数形式。
1. Sequelize如何计算复数?它是否只是在字符串后附加“ s”?
2.如果我想使用不规则复数形式的名词,例如“ Person”,该怎么办?
3.定义实例时,应使用单数还是复数形式?
4.定义别名时,应使用单数还是复数形式?
5.在定义多对多关系时,我应该在through选项中使用单数还是复数形式?
在内部,sequelize使用称为一个真棒库拐点来计算词的单数和复数形式,这与几乎任何英文单词,包括不规则复数如工作"Person" -> "People","Octopus" -> "Octopi","Tooth" -> "Teeth"。但是,有一些单词会导致曲折出现错误,对于这些情况,或者您想强制使用自定义单/复数单词的情况,请参阅下一个主题。
如上所述,大多数带有不规则复数的单词都可以通过变形正确地复数(包括“ Person”)。但是,有几句话表明拐点错了。Sequelize允许您强制使用所需的单数和复数形式,通常接受带有该形式的简单对象{ singular: "your-singular-here", plural: "your-plural-here" }来代替名称字符串。有关更多详细信息,请参见下一主题。
定义实例时,标准方法是使用单数名称,但是您也可以使用复数名称,因为sequelize会在其上应用拐点方法以在需要时获取单数和复数形式:
const Foo = sequelize.define("foo", {
// attributes
});
Run Code Online (Sandbox Code Playgroud)
如果要强制使用自定义单数和复数形式,请使用第三个参数指定名称选项:
const Foo = sequelize.define("foo", {
// attributes
}, {
name: {
singular: "mycustomsingularstring",
plural: "mycustompluralstring"
}
});
Run Code Online (Sandbox Code Playgroud)
为hasOne或belongsTo关联定义别名时,必须使用单数形式:
Foo.belongsTo(Bar, { as: "person" });
Run Code Online (Sandbox Code Playgroud)
为hasMany或belongsToMany关联定义别名时,必须使用复数形式:
Foo.belongsToMany(Bar, { through: Foo_Bar, as: "people" });
Run Code Online (Sandbox Code Playgroud)
或者,如果您想强制使用自定义的单/复数字符串:
Foo.belongsToMany(Bar, {
through: Foo_Bar,
as: {
singular: "mycustomsingularstring",
plural: "mycustompluralstring"
}
});
Run Code Online (Sandbox Code Playgroud)
如果您对联结表本身有一个sequelize模型,则最佳实践是在through选项中使用该模型本身:
// If you have this somewhere
const Foo_Bar = sequelize.define("foo_bar", {
// attributes
});
// Then the best practice is to pass the model itself
Foo.belongsToMany(Bar, { through: Foo_Bar });
Run Code Online (Sandbox Code Playgroud)
如果您没有针对联结表本身的续集模型,这种情况并不罕见(您要让续集本身执行多对多魔术),那么必须使用复数形式:
Foo.belongsToMany(Bar, { through: "foo_bars" });
Run Code Online (Sandbox Code Playgroud)
顺便说一句,您可能已经注意到我的示例中的所有模型定义都是小写的,这是遵循PostgreSQL的约定的(如果您在PostgreSQL的表中有大写字母,则可能会有问题),但是如果您不使用在PostgreSQL中,您可以在模型名称中使用大写字符。
| 归档时间: |
|
| 查看次数: |
1311 次 |
| 最近记录: |