Drizzle-Orm:如何在父表和子表中插入?

问题描述 投票:0回答:1

SQL 新手...如何插入父表和子表?

假设下表

import { integer, pgTable, serial, text } from 'drizzle-orm/pg-core';

export const users = pgTable('user', {
    id: serial('id').primaryKey(),
    name: text('name'),
});

export const tokens = pgTable('token', {
    id: serial('id').primaryKey(),
        userId: text("userId").notNull().references(() => users.id, { onDelete: "cascade" }),
        token: string("token"),
});

要使用令牌创建新用户...我认为手动看起来像这样...

const newUser = await db.insert(users).values({name: "Billy"}).returning();
const token = await db.insert(token).values({userId: newUser.id, token: "123"}).returning();

这是正确的方法还是该事务应该使用视图或事务?

sql postgresql drizzle
1个回答
7
投票

请注意,我对 drizzle 和 CRUD SQL 的东西也很陌生,所以可能有一种“更好”的方法来做到这一点,但我相信你需要将其包装在一个 transaction 中。

基本上,您将返回您创建的新用户的

id
并使用它在您的
tokens
表中插入新记录(这是您已经在做的事情),但是如果发生错误,则数据库“回滚”,什么也没有发生。

await db.transaction(async (tx) => {
  const result = await tx.insert(users).values({ name: 'billy' }).returning({ userId: users.id });
  
  await tx.insert(tokens).values({ userId: result[0].userId, token: '123' })
  
});
© www.soinside.com 2019 - 2024. All rights reserved.