XXとしてる
2019年3月8日金曜日
Sequelizeでupsertしたときのエラーがおきたのでコードを少し読んだときのこと
ORMにSequelizeを使っているのだが、モデルのupsertを使った時に`SQLITE_ERROR: no such column: id`とエラーが発生した。 原因はテーブル作成時にプライマリーキーに指定していたカラムをIDとは異なるものにしていたのだが、それに合わせてモデル定義時に明示的にプライマリーキーを指定する必要があるのだが、それをすっかり忘れていただけであった。 ```js const UserTmp = sequelize.define('UserTmp', { need_primary: { type: DataTypes.STRING, primaryKey: true, // <- 忘れていた }, }, {}); ``` これだけだとあれなので、デバッグのとき`upsert`のオプションにプライマリキーを指定する必要があるのかと当初は思い、 ちょっとSequelizeのコードを読んで見たところ`upsert`する前にHook関数を呼び出すことができることを発見した。 [Sequelize Hooks](http://docs.sequelizejs.com/manual/tutorial/hooks.html#hooks) ```js //モデル定義のとき const UserTmp = sequelize.define('UserTmp', { need_primary: { type: DataTypes.STRING, primaryKey: true, // <- 忘れていた }, }, { hooks: { beforeUpsert(values/*upsertに渡した値*/, options/* upsertに渡したオプション */) { console.log() } } }); ``` また、`Promise.try`というものも初めて見かけた。 Bluebirdというパッケージのものらしい。標準のPromiseより処理が速いそうだ。
0 件のコメント:
コメントを投稿
次の投稿
前の投稿
ホーム
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿