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()
结果如下:
我试图创建与用户具有一对多关系的跟踪记录 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()
结果如下: