所以我刚开始使用Prisma,我试图在datamodel.prisma中添加一个电子邮件字段(这是必需的String)。一切正常,但我也想给它@unique指令,它实际上并不起作用。
我正在从一个视频课程中学习,但是我和讲师的文件不匹配,他有一个datamodel.graphql文件,而我的是datamodel.prisma,认为这可能是原因,并尝试将其手动更改为datamodel。 graphql,但是在那之后我什至不能在终端中使用pyramida部署。
我希望无法添加具有相同电子邮件的用户,它不会给我任何错误消息,但是可以创建具有相同电子邮件的用户。
将感谢您提供有关此问题的任何帮助。
答案 0 :(得分:2)
我有同样的问题。
使用Windows 10和MariaDB(XAMPP)。我还添加了@unique指令-表中已经有一些用户-仍然可以添加具有相同电子邮件地址的用户,而在控制台中没有任何错误消息。但是,当我打开Docker Desktop应用程序时,看到了很多有关重复条目(电子邮件)的错误消息。重新部署prisma似乎在终端中正常工作,但实际上没有。
@realAlexBarge的回答将我引向正确的方向:
“还请注意,新数据模型实际上已部署。如果与现有数据有冲突,则可能需要根据需要使用force标志来覆盖现有模式。”
所以我最后做了什么:
docker-compose down -v --rmi all --remove-orphans
docker-compose up -d
prisma deploy
希望有帮助。
答案 1 :(得分:0)
只需将@unique指令附加到用户类型的email字段,即可将该字段标记为唯一。例如:
type User {
id: ID! @id
email: String! @unique
name: String!
}
这将确保没有两个记录将具有相同的电子邮件(空值除外),这将在prisma文档中更详细地描述:
设置唯一约束可确保模型的两条记录 有问题的字段不能具有相同的值。唯一的 exception是空值,表示多个记录可以具有 在不违反约束的情况下为null的值。唯一字段有一个 在基础数据库中应用的唯一索引。
请参阅:https://www.prisma.io/docs/datamodel-and-migrations/datamodel-POSTGRES-knum/#unique
但是,部署新的数据模型很重要。只有通过prisma CLI部署了数据模式之后,数据库才会考虑新条目和现有条目的唯一约束。假设您已经配置了pyramida.yml,只需运行:
$ prisma deploy
还请注意,实际已部署了新的数据模型。如果您与现有数据有冲突,则可能需要使用force标志来覆盖现有模式。
请参阅:https://www.prisma.io/docs/prisma-cli-and-configuration/cli-command-reference/prisma-deploy-xcv9/