コンテンツにスキップ

Separate

Separate Setting

Reason for separation

mysqlからSELECTするときとINSERTするときに、異なるオブジェクトを使いたい場合があるでしょう。例えば、id カラムがあるとします。selectではnullableではなく、insertではnullableにしたいとします。このような場合に使用します。

Configuration file

const options = {
separate: {
isSeparate: true,
insertPrefix: "insert",
insertSuffix: "",
},
};
module.exports = options;

declared

  • isSeparate - SELECTとINSERTでスキーマを分離するかどうか (default: false)
  • insertPrefix - SELECTとINSERTを区別するためのprefix (default: “insert”)
  • insertSuffix - SELECTとINSERTを区別するためのsuffix (default: "")

example

CREATE TABLE `todo` (
`id` int NOT NULL AUTO_INCREMENT,
`task` varchar(255) NOT NULL,
`completed` tinyint(1) NOT NULL DEFAULT '0',
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
export const todoSchema = z.object({
id: z.number(),
task: z.string(),
completed: z.number(),
created_at: z.date().nullish(),
updated_at: z.date().nullish(),
});
export type Todo = z.infer<typeof todoSchema>;
export const insertTodoSchema = z.object({
id: z.number().nullish(), // <- nullable!
task: z.string(),
completed: z.number(),
created_at: z.date().nullish(),
updated_at: z.date().nullish(),
});
export type InsertTodo = z.infer<typeof insertTodoSchema>;

使用法

const selectObj:Todo = {
id: 1,
task: "task",
completed: 0,
created_at: new Date(),
updated_at: new Date(),
};
const insertObj:InsertTodo = {
task: "task",
completed: 0,
};

このオプションを使用すると、knexを使用してINSERTを行う際に、idなしでオブジェクトを作成することができます。