This plugin simplifies field names in the PostGraphile schema; e.g.
allUsers becomes simply
User.postsByAuthorId becomes simply
Post.userByAuthorId becomes simply
Adding this plugin to your schema is almost certainly a breaking change, so do it before you ship anything! This is the primary reason this isn't enabled by default in PostGraphile.
This plugin is recommended for all PostGraphile users.
This plugin is implemented as a single JS file that does not need to be compiled at all - you can simply copy it into your project and customise it as you see fit.
Alternatively, you can write your own inflection plugin.
Given these tables:
(id serial primary key,name text not null);(id serial primary key,company_id int not null references companies,distributor_id int references companies,name text not null);
pgSimplifyAllRows = false)
company_idcolumn follows the
- All update mutations now accept
pgSimplifyPatch = false)
- If you are using
pgSimpleCollections = "only"then you can set
pgOmitListSuffix = trueto omit the
- Fields where the singular and plural are the same and a distinct plural is required are force-pluralised ("fishes") to avoid conflicts (e.g.
singularize("fish") === pluralize("fish")).
Company.beveragesByDistributorId will remain, because
distributor_id does not follow the
[table_name]_id naming convention, but you could rename this yourself with a smart comment:
comment on constraint "beverages_distributor_id_fkey" on "beverages" isE'@foreignFieldName distributedBeverages';
or with a custom inflector:
yarn add @graphile-contrib/pg-simplify-inflector
npm install --save @graphile-contrib/pg-simplify-inflector
postgraphile --append-plugins @graphile-contrib/pg-simplify-inflector
const PgSimplifyInflectorPlugin = ;// ...app;
Naming your foreign key fields
By naming your foreign key along the lines of
(id serial primary key,author_id int not null references users,...);
We can automatically extract the field prefix:
author and call the relation
author rather than the default:
user. This allows for a post to have an
reviewer, etc. all which point to
The reverse, however, is not so easy. On the User type, we can't call the
reverse of all these different relations
posts. The default inflector
refers to these as
postsByEditorId, etc. However we'd
rather use shorter names, so we introduce a new inflector:
getOppositeBaseName. This inflector is passed a baseName (the part without
_fk suffix, e.g.
reviewer above) and should
return the opposite of that base name which will be prepended to the target
type to produce, e.g.
Failing this, we just fall back to the default (verbose) inflector; it will be
up to you to add smart comments or a custom inflector to override these.
Handling field conflicts:
In most cases, the conflict errors will guide you on how to fix these issues using smart comments.