prisma introspect 生成无效模型

Posted

技术标签:

【中文标题】prisma introspect 生成无效模型【英文标题】:prisma introspect generate invalid model 【发布时间】:2021-09-20 13:05:19 【问题描述】:

棱镜版本:^2.26.0

Prisma/客户端:^2.26.0

@relation 错误消息:解析属性“@relation”时出错:模型posts 中字段userId 的类型与模型users 中引用字段id 的类型不匹配。


为什么在我运行 npx prisma introspect 后 prisma 创建了无效模型或我的代码有问题?

由于我的代码中有这些错误,导致无法进入 prisma studio

任何解决方案或想法可以分享让我更好地了解这一点?

下面是我的sql:

-- Create a custom type
CREATE TYPE "user_role_enum" AS ENUM ('user', 'admin', 'superadmin');

-- Create a table
CREATE TABLE "users"(
    "id" BIGSERIAL PRIMARY KEY NOT NULL,
    "name" VARCHAR(255) NOT NULL,
    "email" VARCHAR(255) UNIQUE NOT NULL,
    "role" user_role_enum NOT NULL DEFAULT('user')
);

-- Create a table
CREATE TABLE "posts"(
    "id" BIGSERIAL PRIMARY KEY NOT NULL,
    "title" VARCHAR(255) NOT NULL,
    "body" TEXT,
    "userId" INTEGER NOT NULL,
    FOREIGN KEY ("userId") REFERENCES "users"("id")
);

-- Create data
INSERT INTO "users" ("name", "email", "role")
VALUES('John Doe', 'john@email.com', 'admin'),
('jane Doe', 'jane@email.com', 'admin'),
('Ahmed Hadjou', 'ahmed@hadjou.com', 'user');

INSERT INTO "posts" ("title", "body", "userId")
VALUES('Hello World!!', 'Hey guys, I see a rainbow through this prisma :D', 1),
('So do I', 'It looks cooool!!!', 2),
('It does', 'Yeahhh', 1);

从 prisma introspect 生成模型


model posts 
  id     BigInt  @id @default(autoincrement())
  title  String  @db.VarChar(255)
  body   String?
  userId Int
  users  users   @relation(fields: [userId], references: [id]) // Error parsing attribute "@relation": The type of the field `userId` in the model `posts` is not matching the type of the referenced field `id` in model `users`.


model users 
  id    BigInt         @id @default(autoincrement())
  name  String         @db.VarChar(255)
  email String         @unique @db.VarChar(255)
  role  user_role_enum @default(user)
  posts posts[] // error in here


enum user_role_enum 
  user
  admin
  superadmin

【问题讨论】:

能否请您提供更多有关该问题的背景信息。这里有几件事会有所帮助: 1. 您使用的是哪个版本的 prisma 和 prisma studio? 2. prisma studio 显示的具体错误是什么? 3. 是工作室的问题还是客户端的问题? 4. 可以使用 prisma 客户端对自省模型进行 CRUD 操作吗? posts.userId 和 users.id 必须都是 Bigint ? 【参考方案1】:

只需在 Post Model 中将 Int 更改为 BigInt userId 即可

【讨论】:

谢谢!我稍后再试! 是的,它有效!我能知道 Int 不可接受的原因是什么吗? 类型问题,在模型用户中您提到 id 作为 BidInt 但在 Post 模型中您提到 userId Int,这就是原因,如果我的答案有效,请将我的答案标记为已解决,以便其他人让它有效.

以上是关于prisma introspect 生成无效模型的主要内容,如果未能解决你的问题,请参考以下文章

无效的`prisma.mytable.create()`调用:外键约束在字段上失败:使用cockroachdb时`(不可用)`

prisma.yml 无法找到

如何在两个字段 prisma-graphql 中使用相同的生成 ID

TypeGraphql 和 Prisma 2 类型冲突

运行 prisma init 时,Prisma 不生成文件

使用 Prisma,我们如何为类型添加评论?