Javascript 复数在Sequelize中如何工作?

Javascript 复数在Sequelize中如何工作?,javascript,sequelize.js,Javascript,Sequelize.js,在使用和阅读时,我注意到有时模型名称使用单数形式,有时使用复数形式。通过关联自动添加到模型中的某些方法具有单数形式,而某些方法具有复数形式 1.Sequelize如何计算复数?它只是在字符串后面加上一个“s”吗 2.如果我想用一个不规则复数的名词,比如“Person”,该怎么办 3.定义实例时,我应该使用单数形式还是复数形式 4.定义别名时,我应该使用单数形式还是复数形式 5.定义多对多关系时,我应该在至选项中使用单数形式还是复数形式?Sequelize如何计算复数 sequelize使用了一个

在使用和阅读时,我注意到有时模型名称使用单数形式,有时使用复数形式。通过关联自动添加到模型中的某些方法具有单数形式,而某些方法具有复数形式

1.Sequelize如何计算复数?它只是在字符串后面加上一个“s”吗

2.如果我想用一个不规则复数的名词,比如“Person”,该怎么办

3.定义实例时,我应该使用单数形式还是复数形式

4.定义别名时,我应该使用单数形式还是复数形式

5.定义多对多关系时,我应该在
选项中使用单数形式还是复数形式?

Sequelize如何计算复数 sequelize使用了一个很棒的库,名为计算单数和复数形式的单词,它几乎适用于任何英语单词,包括不规则的复数形式,如
“Person”->“People”
“Octopus”->“Octopi”
“Tooth”->“Tooth”
。但是,有一些单词的词形变化会出错,对于那些情况,或者您希望强制使用自定义单数/复数单词的情况,请参阅下一个主题


如果我想用不规则复数的名词怎么办? 如上所述,大多数复数不规则的单词都会通过词形变化(包括“Person”)正确地进行复数化。但有几个词的词形变化是错误的。Sequelize允许您 要强制使用所需的单数和复数形式,通常接受一个简单的对象,其形式为
{singular:“your singular here”,复数形式为:“your multilar 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" });
定义
具有多个
属于多个
关联的别名时,必须使用复数形式:

Foo.belongsToMany(Bar, { through: Foo_Bar, as: "people" });
Foo.belongsToMany(Bar, { through: "foo_bars" });
或者,如果要强制自定义单数/复数字符串:

Foo.belongsToMany(Bar, {
    through: Foo_Bar,
    as: {
        singular: "mycustomsingularstring",
        plural: "mycustompluralstring"
    }
});

定义多对多关系时 如果您有连接表本身的sequelize模型,最佳做法是在
选项中使用模型本身:

// 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_Bar, as: "people" });
Foo.belongsToMany(Bar, { through: "foo_bars" });


顺便说一句,您可能已经注意到我的示例中的所有模型定义都是小写的,这是为了遵循PostgreSQL的约定(如果您在PostgreSQL中的表中有大写字母,则可能会有问题),但是,如果您不使用PostgreSQL,您可能可以在模型名称中使用大写字符。

坦率地说,他们本不应该添加此项,为什么他们要代表用户决定表名的名称,这会使维护他们的表名变得复杂lib@PirateApp您好,我现在已经成为一名维护人员,在未来,我可能会开始一些改变,以改变这种默认行为!我真的对这个单数和复数的东西感到恼火,而且弄不清应该在哪里使用它。这使得整个使用过程变得繁琐和浪费资源time@ShyamSundarR您好,很抱歉听到您遇到麻烦,谢谢您让我知道,也许我们可以添加一个选项来完全禁用此功能。然而,理想情况下,我们希望复数应用于有意义的地方,当然我们不希望浪费peopke的时间,你能打开一个问题,展示一个最简单的例子,让你感到困扰吗?谢谢@佩德罗亚,我是一个很新的人,最近可能是一周前,我一直在尝试这个包裹。我基本上是在研究github的现有包以获得一些示例代码。我通常了解db的一般原则,并与mongoose和mongo合作过。我的意思是,我基本上对我们定义模型的地方感到困惑,比如迁移createtable方法。有很多地方。我也永远无法真正理解何时会使用模型js文件,它会在内部用于限制迁移到这些模型的数据吗?真的不想看完整的文档吗