Entity Generator
To generate entities from existing database schema, you can use EntityGenerator
helper.
You can use it via CLI:
To work with the CLI, first install
@mikro-orm/cli
package locally. The version needs to be aligned with the@mikro-orm/core
package.
npx mikro-orm generate-entities --dump # Dumps all generated entities
npx mikro-orm generate-entities --save --path=./my-entities # Saves entities into given directory
Or you can create simple script where you initialize MikroORM like this:
./generate-entities.ts
import { MikroORM } from '@mikro-orm/core';
(async () => {
const orm = await MikroORM.init({
discovery: {
// we need to disable validation for no entities
warnWhenNoEntities: false,
},
dbName: 'your-db-name',
// ...
});
const generator = orm.getEntityGenerator();
const dump = await generator.generate({
save: true,
baseDir: process.cwd() + '/my-entities',
});
console.log(dump);
await orm.close(true);
})();
Then run this script via ts-node
(or compile it to plain JS and use node
):
$ ts-node generate-entities
Advanced configuration
By default, the EntityGenerator
generates only owning sides of relations (e.g. M:1) and uses decorators for the entity definition. We can adjust its behaviour via entityGenerator
section in the ORM config. Available options:
bidirectionalRelations
to generate also the inverse sides for themidentifiedReferences
to generate M:1 and 1:1 relations as wrapped referencesentitySchema
to generate the entities usingEntitySchema
instead of decoratorsesmImport
to use esm style import for imported entities e.x. whenesmImport=true
, generated entities includeimport Author from './Author.js'
skipTables
to ignore some database tables (accepts array of table names)skipColumns
to ignore some database tables columns (accepts an object, keys are table names with schema prefix if available, values are arrays of column names)
const dump = await orm.entityGenerator.generate({
save: true,
baseDir: process.cwd() + '/my-entities',
skipTables: ['book', 'author'],
skipColumns: {
'public.user': ['email', 'middle_name'],
},
});
Current limitations
- in mysql, tinyint columns will be defined as boolean properties