Запрос клиента 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,
})
Другие вопросы по тегам