Apollo graphql prisma create mutation 给一对多错误

Apollo graphql prisma create mutation give one to many error

我试图创建与用户具有一对多关系的跟踪记录 table,但出现以下错误。

An operation failed because it depends on one or more records that were required but not found. No 'User' record(s) (needed to inline the relation on 'Track' record(s)) was found for a nested connect on one-to-many relation 'TrackToUser'."

我想知道这条记录是谁创建的。这样我就在我的架构中将曲目添加给了用户。

我可以创建艺术家和专辑记录。

请问我为什么会遇到这个问题。

model Genre {
  id     String  @id @default(cuid())
  name   String  @unique @db.VarChar(255)
  albums Album[]
  @@map("genres")
}

model SongWriter {
  id     String  @id @default(cuid())
  name   String  @unique @db.VarChar(255)
  tracks Track[]

  @@map("songwriters")
}

model Artist {
  id              String    @id @default(cuid())
  name            String    @unique @db.VarChar(255)
  bio             String?   @db.VarChar(1024)
  profile_picture String    @db.VarChar(512)
  albums          Album[]
  tracks          Track[]
  active          Boolean   @default(true)
  user            User      @relation(fields: [user_id], references: [id])
  user_id         String
  created_at      DateTime  @default(now())
  updated_at      DateTime? @updatedAt

  @@map("artists")
}

model Album {
  id          String    @id @default(cuid())
  title       String    @db.VarChar(255)
  album_cover String    @db.VarChar(512)
  description String?   @db.VarChar(5120)
  released    Int       @default(1900)
  artists     Artist[]
  genres      Genre[]
  tracks      Track[]
  active      Boolean   @default(true)
  user        User      @relation(fields: [user_id], references: [id])
  user_id     String
  created_at  DateTime  @default(now())
  updated_at  DateTime? @updatedAt

  @@map("albums")
}

model Track {
  id          String       @id @default(cuid())
  title       String       @db.VarChar(255)
  description String?      @db.VarChar(5120)
  mp3_url     String       @db.VarChar(1024)
  youtube_url String       @db.VarChar(1024)
  duration    Int          @default(0)
  artists     Artist[]
  album       Album        @relation(fields: [album_id], references: [id])
  album_id    String
  songWriters SongWriter[]
  active      Boolean      @default(true)
  user        User         @relation(fields: [user_id], references: [id])
  user_id     String
  created_at  DateTime     @default(now())
  updated_at  DateTime?    @updatedAt

  @@map("tracks")
}

model User {
   id              String    @id @default(cuid())
   name            String    @unique @db.VarChar(255)
   password        String    @db.VarChar(512)
   profile_picture String?   @db.VarChar(512)
   role            Role      @default(USER)
   tokenVersion    Int       @default(0)
   artists         Artist[]
   albums          Album[]
   tracks          Track[]
   active          Boolean   @default(true)
   created_at      DateTime  @default(now())
   updated_at      DateTime? @updatedAt
   @@map("users")
 }

我已经尝试创建一个Track record并且一切正常,给你代码片段(我不知道它是否是你想要的):

const { PrismaClient } = require('@prisma/client')
const prisma = new PrismaClient()

const saveData = async () => {
  const user = await prisma.user.create({
    data: {
      name: 'The Best User',
      password: '123456',
      profile_picture: 'https://www.example.com/user.jpg',
      tokenVersion: 1,
    }
  })
  console.log('USER', user)
  const gnre = await prisma.genre.create({
    data: {
      name: 'The Best Genre',
    }
  })
  console.log('GENRE', gnre)
  const album = await prisma.album.create({
    data: {
      title: 'The Best Album',
      album_cover: 'https://www.example.com/album.jpg',
      description: 'This is the best album ever',
      released: 1,
      active: true,
      user: {
        connect: {
          id: user.id
        }
      },
      genres: {
        connect: {
          id: gnre.id
        }
      }
    }
  })
  console.log('ALBUM', album)
  const artist = await prisma.artist.create({
    data: {
      name: 'The Best Artist',
      bio: 'The best artist ever',
      profile_picture: 'https://www.example.com/artist.jpg',
      active: true,
      user: {
        connect: {
          id: user.id
        }
      }
    }
  })
  console.log('ARTIST', artist)
  const songWriter = await prisma.songWriter.create({
    data: {
      name: 'The Best Song Writer',
    }
  })
  console.log('SONG WRITER', songWriter)
  const track = await prisma.track.create({
    data: {
      title: 'The Best Track',
      description: 'The best track ever',
      mp3_url: 'https://www.example.com/track.mp3',
      youtube_url: 'https://www.youtube.com/watch?v=dQw4w9WgXcQ',
      duration: 1000,
      active: true,
      artists: {
        connect: {
          id: artist.id
        }
      },
      album: {
        connect: {
          id: album.id
        }
      },
      user: {
        connect: {
          id: user.id
        }
      },
      songWriters: {
        connect: {
          id: songWriter.id
        }
      }
    },
    include: {
      artists: true,
      album: true,
      user: true,
      songWriters: true,
    }
  })
  console.log('TRACK')
  console.log(JSON.stringify(track, null, 2));
}

saveData()

结果如下: