簡體   English   中英

無法使用 nestjs 中的另一個 shcema 在棱鏡模式中搜索數據

[英]Can't search data in prisma schema using aonther shcema in nestjs

編輯:

使用 where: { id: userId } don't help ,因為它使用書簽的 id 而不是添加書簽的用戶進行搜索

我的目標是能夠使用來自另一個 model 的 userId 在書簽表中進行搜索。

在這個使用 Prisma 的 model 文件中,我有兩個模型(一個用於用戶,一個用於書簽):

generator client {
  provider = "prisma-client-js"
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}

model User {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  email String @unique
  hash  String

  firstName String?
  lastName  String?

  bookmarks Bookmark[]

  @@map("users")
}

model Bookmark {
  id        Int      @id @default(autoincrement())
  createdAt DateTime @default(now())
  updatedAt DateTime @updatedAt

  title       String
  description String?
  link        String

  userId Int
  user   User @relation(fields: [userId], references: [id])

  @@map("bookmarks")
}

要使用 userId 創建 seacrh,我使用運行此 function 的 nestjs 服務:

getBookmarksByUserId(userId: number) {
    return this.prisma.bookmark.findMany({
        where: {
            userId: userId
        }
    });
}

但是當我運行測試時,會彈出一個錯誤:

Unknown arg `userId` in where.userId for type BookmarkWhereInput. Did you mean `id`? Available args:
type BookmarkWhereInput {
  AND?: BookmarkWhereInput | List<BookmarkWhereInput>
  OR?: List<BookmarkWhereInput>
  NOT?: BookmarkWhereInput | List<BookmarkWhereInput>
  id?: IntFilter | Int
  createdAt?: DateTimeFilter | DateTime
  updatedAt?: DateTimeFilter | DateTime
  title?: StringFilter | String
  description?: StringNullableFilter | String | Null
  link?: StringFilter | String
}

我嘗試了一切,使用 AND,使用 equle,使用 include 但沒有成功。

我錯過了什么?

更改 prisma 模式后,如果您已經這樣做,則應該使用此命令生成npx prisma generate

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function getUserBookmarks(userId: number) {
  const user = await prisma.user.findUnique({
    where: { id: userId },
    include: { bookmarks: true },
  });

  return user?.bookmarks;
}

您可以使用它與用戶 2 一起獲取書簽解決方案是直接在書簽表中獲取書簽

import { PrismaClient } from '@prisma/client';

const prisma = new PrismaClient();

async function getUserBookmarks(userId: number) {
  const bookmarks = await prisma.bookmark.findMany({
    where: { user: { id: userId } },
  });

  return bookmarks;
}

當您加入像用戶字段這樣的表時,prisma 會為自己創建虛構的字段,您可以使用它來加入和搜索事物

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM