使用法
- updateの代わりにupsertにするだけです。なければinsert, あればupdateという挙動になります。
const result = await client<Todo>('todo').upsert(todoItem).where(なんらかの条件);
もともとCockroachDBにしか対応していなかったのですが、3.1.0で実装されたようです。ドキュメントは更新されていませんが、実際に3.1.0にあげてみたらmysqlで動きました。これまではupdateしてrowが0ならinsertみたいな小細工をしていたのですが、これですっきり書けますね。
発行されたSQL文を確認してみましたが、REPLACE INTOが使用されているようです。insert on duplicate key update ではないんですね。一度削除してから入れ直しになるので、created_atみたいなカラムがあるときは要注意です。まあ、これはknexというよりREPLACE INTOのハマりですが……。
……もうみんなprismaを使っており、knexなんて使ってない?