docs/versioned_docs/version-5.9/entity-generator.md
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/clipackage locally. The version needs to be aligned with the@mikro-orm/corepackage.
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:
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
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 using EntitySchema instead of decoratorsesmImport to use esm style import for imported entities e.x. when esmImport=true, generated entities include import 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'],
},
});