在使用 Sequelize 时和阅读 the Sequelize docs , 我观察到有时模型名称以单数形式使用,有时以复数形式使用。关联自动添加到模型中的方法有的是单数形式,有的是复数形式。
1. Sequelize 如何计算复数?它只是在字符串后附加一个“s”吗?
2.如果我想使用不规则复数形式的名词怎么办,比如“Person”?
3.在定义实例时,应该使用单数形式还是复数形式?
4.定义别名时,用单数还是复数?
5. 在定义多对多关系时,through
选项中应该使用单数形式还是复数形式?
最佳答案
Sequelize 如何计算复数
在幕后,sequelize 使用了一个很棒的库,叫做 inflection计算单词的单数和复数形式,它几乎适用于任何英语单词,包括不规则的复数形式,例如 "Person"-> "People"
、"Octopus"-> "Octopi"
,“ dentry ”->“ dentry ”
。不过,有几个词的变形会出错,对于那些情况,或者您想要强制使用自定义单数/复数词的情况,请参阅下一个主题。
如果我想使用不规则复数形式的名词怎么办?
如上所述,大多数具有不规则复数的单词将通过变形正确复数(包括“Person”)。但是有几个词的词形变化是错误的。 Sequelize 让你
强制使用您希望的单数和复数形式,通常接受形式为 { singular: "your-singular-here", plural: "your-plural-here"}
的普通对象代替名称字符串。有关详细信息,请参阅下一主题。
定义实例时
在定义实例时,标准的方式是使用单数名称,但你也可以使用复数名称,因为sequelize会对其应用屈折法来获得单复数形式 需要时:
const Foo = sequelize.define("foo", {
// attributes
});
如果要强制自定义单复数形式,请使用第三个参数指定名称选项:
const Foo = sequelize.define("foo", {
// attributes
}, {
name: {
singular: "mycustomsingularstring",
plural: "mycustompluralstring"
}
});
定义别名时
为 hasOne
或 belongsTo
关联定义别名时,必须使用单数形式:
Foo.belongsTo(Bar, { as: "person" });
为hasMany
或belongsToMany
关联定义别名时,必须使用复数形式:
Foo.belongsToMany(Bar, { through: Foo_Bar, as: "people" });
或者,如果您想强制自定义单数/复数字符串:
Foo.belongsToMany(Bar, {
through: Foo_Bar,
as: {
singular: "mycustomsingularstring",
plural: "mycustompluralstring"
}
});
定义多对多关系时
如果您有联结表本身的 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 });
如果您没有联结表本身的 sequelize 模型,这并不罕见(您让 sequelize 自己完成多对多的魔法),那么您必须使用复数形式:
Foo.belongsToMany(Bar, { through: "foo_bars" });
顺便说一下,您可能已经注意到我示例中的所有模型定义都是小写的,这是为了遵循 PostgreSQL 的约定(如果您在 PostgreSQL 的表中有大写字母,您可能会遇到问题),但是如果您不使用 PostgreSQL,则可以在模型名称中使用大写字符。
关于javascript - 复数在 Sequelize 中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49459596/