Запрос клиента Prisma для получения последней
Учитывая следующую схему. Как мне запросить последний коммит в каждом репозитории с помощью клиента prisma2?
model Commit {
id String @default(uuid()) @id
date DateTime @default(now())
}
model Branch {
id String @default(uuid()) @id
commit Commit @relation(fields: [commitId],references: [id])
commitId String
repository Repository @relation(fields: [repositoryId],references: [id])
repositoryId String
}
model Repository {
id String @default(uuid()) @id
}
2 ответа
Думаю, ваша схема должна выглядеть примерно так:
model Commit {
id String @default(uuid()) @id
branch Branch @relation(fields: [branchId], references: [id])
createdAt DateTime @default(now())
branchId String
}
model Branch {
id String @default(uuid()) @id
name String
repository Repository @relation(fields: [repositoryId], references: [id])
commits Commit[]
repositoryId String
}
model Repository {
id String @default(uuid()) @id
branch Branch[]
}
И вы сможете получить последние коммиты из всех веток в репозитории следующим образом:
await prisma.repository.findMany({
select: {
branch: {
select: {
name: true,
commits: {
orderBy: {
createdAt: 'desc',
},
take: 1,
},
},
},
},
})
Чтобы получить последний элемент, в вашей модели должен быть идентификатор (Int). Итак, вы можете вызвать последний элемент по идентификатору. По крайней мере, потому что вы выбираете findMany, он вернет массив, выберите первый элемент, добавив [0] в конец кода:
const latestQuery = await prisma.modelName.findMany({
orderBy: {
id: 'desc',
},
take: 1,
})
Если вы не добавитеwhere
он вернет последний элемент без каких-либо условий, но если вы хотите добавить строку условия, имя которой равно «какому-то имени», возраст 25 и т. д., вы можете добавить ее туда, где:
const latestQuery = await prisma.modelName.findMany({
where:{
name: "some name",
age: 25
},
orderBy: {
id: 'desc',
},
take: 1,
})