Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to add a new column to an existing entity with typeorm

Tags:

sqlite

typeorm

I am starting to study typeorm and I am confused about what happens if I add a new column to an existing entity that was already persisted with data. I use SQlite.

I saw in the documentation, in the "Migrations" section, it looks like there is a procedure that must be done if I want to add a new column.

But when I saw this issue in typeorm's github, I understood that if I just add the new "@Column" annotated property to the Entity class would be enough and typeorm would create the column automatically when the app starts.

I was really hoping that typeorm would be able to handle that schema change automatically.

Can someone help?

like image 733
Bruno Negrão Zica Avatar asked Mar 04 '23 12:03

Bruno Negrão Zica


1 Answers

TypeOrm is capable of changing the schema but is does not run migrations automatically on server start (this is not a wanted behaviour). If you want the migrations to be executed when the app the starts you need to todo the following to steps:

  1. Create migration file:

After changing your entity (like adding a new column) you need to generate a migration file:

typeorm migration:generate -c 'connectionName'

That migration file is then created into a folder configured in your ormconfig.json.

  1. Run migrations

Before you start your server, you need to create the database connection and run the migrations. So your main file should look like

import { Connection, getConnectionManager } from 'typeorm';

const connectionManager = getConnectionManager();
const connection = connectionManager.get(connectionName);
await connection.runMigrations();

// start your server
startServer();

For development purpose you can also use schema synchronization, in that case typeorm syncs your database with your entity:

npx typeorm schema:sync -c 'connectionName'
like image 109
JudgeFudge Avatar answered Mar 06 '23 01:03

JudgeFudge