테이블이 없는데도 업데이트 이미 되있다고 마이그레이션이 안될 때가 있다.

 

sequelize는 SequelizeMeta라는 테이블을 만들어서 migration 상태를 저장한다.

undo할 때 여기 저장된 migration 정보를 읽어서 down을 실행시키는 것 같다.

select * from "SequelizeMeta";

하고 있으면

drop table "SequelizeMeta";

 

migration정보를 db에 업뎃 시키는 것이 바람직한지는 생각해볼 문제다.

실제 db migration이 꼭 sequelize로만 실행된다는 보장은 없다.

SequelizeMeta를 자연스럽게 확인하도록 만들면 모르겠다.

'nodeJS > sequelize' 카테고리의 다른 글

Sequelize select객체에 대한 생각  (0) 2019.03.29
outer join 테이블 조건 where로 걸기  (0) 2019.03.24
sequelize 설정  (0) 2019.03.10

sequelize로 findAll 해서 얻은 객체는 순수한 DB 자료구조가 아니다

여러 함수화 여러 상태가 복합적으로 얽혀있다.

이걸 다 쓰냐고 말한다면 거의 그렇지 않다

1. sequelize 객체 - 옵션 없이 그냥 find로 나온 객체

2. find option에서  raw: true를 주었을 경우

3. get() 메서드로 얻는 방법

4. toJSON()으로 얻는 법

5. dataValues로 얻는 법

 

뭔가 통일을 해야 할 것 같은데 가장 범용적인 방법이 뭔지 혼란 스럽다.

 

시퀄라이즈에서는 outer join 한 테이블 컬럼을 join된 결과에서 where 구문으로 불러오려고 할 때

그냥 join한 테이블 이름 또는 alias로 찾을 수가 없다.

이 경우 '$nested.column$' 문법으로 볼러 올 수 있다.


eg.) where: { $UserDetail.address$: { [Op.like]: '%영등포%' } }


어쩌다가 이렇게 불편하게 됐는지 언제한번 들여다 보아야 겠다.




const TRANSACTION_NAMESPACE = "sequelize-transaction";

const cls = require("continuation-local-storage"),
    namespace = cls.createNamespace(TRANSACTION_NAMESPACE);

SequelizeOrigin.useCLS(namespace);

export const ns = namespace;

export const sequelize = new Sequelize({
    host,
    database,
    dialect: "mysql",
    username,
    password,
    modelPaths: [
        path.resolve(__dirname, "..", "model/**/*.repository{.ts,.js}"),
    ],
    logging: !profile.isProduction && false,
    modelMatch: (filename: string, member: string) => {
        if (filename === member) {
            return true;
        }

        const removeRepository = filename.split(".")[0];
        return removeRepository === member;
    },
});

export const transactionManager: TransactionManager = {
    transaction<T>(fn, options = {propagation: "REQUIRED"}) {
        if (options.propagation !== "REQUIRED") {
            return sequelize.transaction(() => fn());
        }

        const tx = cls.getNamespace(TRANSACTION_NAMESPACE).get("transaction");
        return tx ? fn() : sequelize.transaction(() => fn());
    },
};


+ Recent posts