UNPKG

undeexcepturi

Version:

TypeScript ORM for Node.js based on Data Mapper, Unit of Work and Identity Map patterns. Supports MongoDB, MySQL, PostgreSQL and SQLite databases as well as usage with vanilla JavaScript.

94 lines (59 loc) 2.74 kB
--- title: Naming Strategy --- When mapping your entities to database tables and columns, their names will be defined by naming strategy. There are 3 basic naming strategies you can choose from: - `UnderscoreNamingStrategy` - default of all SQL drivers - `MongoNamingStrategy` - default of `MongoDriver` - `EntityCaseNamingStrategy` - uses unchanged entity and property names You can override this when initializing ORM. You can also provide your own naming strategy, just implement `NamingStrategy` interface and provide your implementation when bootstrapping ORM: ```typescript class YourCustomNamingStrategy implements NamingStrategy { ... } const orm = await MikroORM.init({ ... namingStrategy: YourCustomNamingStrategy, ... }); ``` > You can also extend `AbstractNamingStrategy` which implements one method for you - `getClassName()` that is used to map entity file name to class name. ## Naming Strategy in mongo driver `MongoNamingStrategy` will simply use all field names as they are defined. Collection names will be translated into lower-cased dashed form: `MyCoolEntity` will be translated into `my-cool-entity` collection name. ## Naming Strategy in SQL drivers `MySqlDriver` defaults to `UnderscoreNamingStrategy`, which means your all your database tables and columns will be lower-cased and words divided by underscored: ```sql CREATE TABLE `author` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `created_at` datetime(3) DEFAULT NULL, `updated_at` datetime(3) DEFAULT NULL, `terms_accepted` tinyint(1) DEFAULT NULL, `name` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `born` datetime DEFAULT NULL, `favourite_book_id` int(11) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` ## NamingStrategy API #### `NamingStrategy.getClassName(file: string, separator?: string): string` Return a name of the class based on its file name. --- #### `NamingStrategy.classToTableName(entityName: string): string` Return a table name for an entity class. --- #### `NamingStrategy.propertyToColumnName(propertyName: string): string` Return a column name for a property. --- #### `NamingStrategy.referenceColumnName(): string` Return the default reference column name. --- #### `NamingStrategy.joinColumnName(propertyName: string): string` Return a join column name for a property. --- #### `NamingStrategy.joinTableName(sourceEntity: string, targetEntity: string, propertyName: string): string` Return a join table name. This is used as default value for `pivotTable`. --- #### `NamingStrategy.joinKeyColumnName(entityName: string, referencedColumnName?: string): string` Return the foreign key column name for the given parameters. ---