typeORM カラムの追加時の並び順を調整する
OverView
description
カラムを追加したい。created_at
,updated_at
の前に追加したい
MySQL使用
import { Column, CreateDateColumn, Entity, PrimaryGeneratedColumn, UpdateDateColumn, } from 'typeorm' @Entity() export class Users{ @PrimaryGeneratedColumn('increment') readonly id!: number @Column({ name: 'name' }) readonly name!: string // Add @Column({ name: 'description' }) readonly name!: string @CreateDateColumn({ name: 'created_at' }) readonly createdAt!: Date @UpdateDateColumn({ name: 'updated_at' }) readonly updatedAt!: Date }
Problem
Entitiyの順番になると思ったら、追加したdescriptionカラムがupdated_at
の後ろ、最後尾に位置してしまった
typeORMにカラムの順番を指定するオプションはなさそう
公式関連issue
https://github.com/typeorm/typeorm/issues/7687
https://github.com/typeorm/typeorm/issues/541
How to solve
調べても対処法が見つからなかったのでmigrationファイルを直接編集したらできた👏
通常とおりmigrationファイルを生成する。
npm run typeorm migration:generate -- -n AddDescriptionColumnToUser
生成されたmigrationを編集
AFTER [カラム名]
を追加npm run typeorm migration:run
import { MigrationInterface, QueryRunner } from 'typeorm' export class AddDescriptionColumnToUser1234567 implements MigrationInterface { name = 'AddDescriptionColumnToUse1234567r' public async up(queryRunner: QueryRunner): Promise<void> { await queryRunner.query( // AFTER [カラム名] を追加 'ALTER TABLE `users` ADD `description` varchar(255) NOT NULL AFTER `name`', ) } public async down(queryRunner: QueryRunner): Promise<void> { await queryRunner.query('ALTER TABLE `uers` DROP COLUMN `description`') } }