mysql 创建父行时Prisma自动创建相关行

b0zn9rqh  于 2023-10-15  发布在  Mysql
关注(0)|答案(3)|浏览(120)

我有一个这样的模式

model User {
  id       Int      @default(autoincrement())
  settings Settings
}

model Settings {
  userId     Int
  settingOne Boolean @default(false)
  user       User    @relation(fields: [userId], references: [id], onDelete: Cascade)
}

我不希望用户中的设置是可选的-有没有一种方法可以在创建用户时自动在设置表中创建相应的行?

iklwldmw

iklwldmw1#

这是不可能的,因为如果关系的双方都需要,那么你将如何创建它们中的任何一方?因此,没有关系标量的关系(表示数据库中的外键的字段)必须是可选的。你可以自己决定哪一个。
例如,您想要创建User,但Settings是必需的,因此您需要先创建Settings。但是要创建Settings,您还需要User,因为Settings模型需要它。
更多信息在docs

o4tp2gmn

o4tp2gmn2#

我在我的生活中做了一件非常相似的事情:

const publication = await prisma.publication.create({
    data: {
        title: e.title,
        type: e.type,
        content: e.content,
        user: {
            connect: {
                id: user.id
            }
        },
        publicationStatus: {
            create: {
                status: 'DRAFT'
            }
        }
    }
});

我们所有的publications都有一个对应的publicationStatus,类似于你列出的问题,也许你可以这样做:

await prisma.user.create({
    data: {
        settings: {
            create: {
                settingOne: true
            }
        }
    }
})

或者类似的东西

dfuffjeb

dfuffjeb3#

如果使用SQL,则可以创建一个将在用户插入时运行的过程

相关问题