Prisma,如何按关系中的字段获取顺序?

问题描述 投票:0回答:2

我正在学习如何使用 Prisma,但我遇到了一个相当简单的问题。假设我有这些实体(简化):

model User { 
    id        Int       @id @default(autoincrement())
    email     String    @unique
    password  String
    name      String
    avatar    String
    createdAt DateTime  @default(now())
    updatedAt DateTime  @updatedAt
    UserInfo  UserInfo?
}

model UserInfo {
    id        Int     @id @default(autoincrement())
    user_id   Int     @unique
    user      User    @relation(fields: \[user_id\], references: \[id\])
    is_active Boolean @default(false)
}

我想检索按 UserInfo 表中的 is_active 字段排序的所有用户,然后按 User 表中的另一个字段排序。某些用户的用户信息可能未填充。

要明确的是,这是我想要实现的查询:

SELECT * FROM User u 
FULL JOIN UserInfo ui ON u.id = ui.user_id
ORDER BY ui.is_active DESC, u.name

我尝试了以下方法(以及其他一些我现在找不到的方法),但没有运气:

const result = await prisma.user.findMany({
  include: {
    UserInfo: {
      orderBy: {
        is_active: 'desc',
      },
    },
  },
});

const result = await prisma.user.findMany({
  select: {
    // [...fields]
    userInfo: {
      select: {
        // [...fields]
      },
      orderBy: {
        is_active: 'desc',
      },
    },
  },
  orderBy: [
    {
      is_active: 'desc',
    },
    {
      name: 'desc',
    },
  ],
});

我错过了什么?我是不是做错了什么?

我觉得我错过了一些非常愚蠢的东西,或者我没有正确理解文档......

任何帮助将不胜感激!

预先感谢您的协助!

node.js next.js prisma
2个回答
0
投票

你可以尝试这个查询吗

const res = await prisma.user.findMany(
  {
    orderBy:[
      {
        UserInfo:{
          is_active: 'desc'
        },

      },
      {
        name: 'desc'
      }
    ]
  }
)

此外,您可以查看文档的部分


0
投票

我觉得你已经找到了答案,但是是的,这是可能的,实际上你的代码似乎是正确的并且应该可以工作。

这在我的用例中非常有效:

  const response = await prisma.configuration.findUnique({
    where: { id: configuration.id },
    include: {
      water_tanks: {
        orderBy: {
          id: "asc",
        },
      },
      wash_bays: {
        orderBy: {
          id: "asc",
        },
      },
    },
  });
© www.soinside.com 2019 - 2024. All rights reserved.