1

有没有办法禁用 Postgraphile 中的“remove-the-plural-s”功能?

我的数据库中有一个表OS,并且正在使用非常棒的Postgraphile库来免费创建一个 GraphQL 界面。一切都很好,但 Postgraphile 正在截断我的表名,认为它是复数形式。所以我得到allOs而不是allOsesand createO, updateO, 等等...

我试过了:

  • 在表名后添加下划线,然后它只保留整个带有下划线的东西。
  • 添加一个下划线 ( O_S) 然后复数有大写-sallOS但单数是O_
  • 一个聪明的评论指定E'@name os',但它仍然放弃s
  • 一个聪明的注释,指定E'@name oss'然后正确复数allOsses(哈哈)并保留单数oss

PS 如果你看到这个 Benjie/其他贡献者,你的文档非常棒,图书馆将为我节省几个月的工作。

4

1 回答 1

4

这种变化是由 PostGraphile 的变形器执行的;然而它并不总是正确的(例如在这种情况下),但幸运的是它可以用一个小插件覆盖它。

在这种情况下,最好为pluralizeandsingularize函数添加特定的例外;您可以使用我们的变形系统中的makeAddInflectorsPlugin来做到这一点。确保作为第二个参数传递,以便系统知道您故意覆盖变形器。true

const { makeAddInflectorsPlugin } = require('graphile-utils');

module.exports = makeAddInflectorsPlugin(oldInflectors => ({
  pluralize(str) {
    if (str.match(/^os$/i)) {
      return str + 'ses';
    }
    return oldInflectors.pluralize(str);
  },
  singularize(str) {
    if (str.match(/^osses$/i) {
      return str.substr(0, 2);
    }
    return oldInflectors.singularize(str);
  }
}), true);

我很高兴你喜欢 PostGraphile

于 2019-02-02T18:44:26.137 回答