gpt4 book ai didi

typescript - 棱镜 : select on many to many with multiple conditions

转载 作者:行者123 更新时间:2023-12-05 03:35:06 24 4
gpt4 key购买 nike

我有两个表 UserPost 由自定义的多对多表链接,例如:

model User {
id Int @id @default(autoincrement())
name String
enabled Bool
posts users_to_posts[]
}

model Post {
id Int @id @default(autoincrement())
name String
enabled Bool
users users_to_posts[]
}

model user_to_post {
user user? @relation(fields: [user_id], references: [id])
user_id Int
post post? @relation(fields: [post_id], references: [id])
post_id Int
@@id([user_id, post_id])
}

我正在尝试根据必须启用用户和帖子的帖子 ID 列表获取用户列表。

到目前为止,如果他们在给定的帖子数组中有帖子,我可以获得启用的正确用户,但我无法检查该帖子是否已启用,也无法过滤帖子(我得到了所有帖子如果匹配则与用户关联)

这是我的(几乎)工作代码:

import { PrismaClient, Prisma } from '@prisma/client'

const prisma = new PrismaClient()

export default async function handler(req, res) {
if (req.method !== 'POST') {
res.status(400).send({ message: 'Only POST requests allowed for this route' })
} else {
const { posts_id } = req.query
const posts_array = posts_id.split(",").map(function(item) {
return parseInt(item)
})
const ret = await prisma.user.findMany({
where: {
enabled: true,
post: { some: { post_id: { in: posts_array } }, },
},
include: {
_count: { select: { post: true } }
post: { select: { post: true }, },
},
})
res.status(200).send(ret)
// ...
}
}

我仍在努力理解如何在不依赖 typescript 的情况下进行多个嵌入式选择来使查询正常工作(女巫远非理想)

最佳答案

据我了解,您需要的 2 个约束条件目前未在您的查询中表示。

  1. 如果启用了 posts_array 中的帖子,则只返回一个 user
  2. 过滤返回的用户帖子,使其只包含启用的帖子。

我已更新您的查询以添加这两个条件。

const users = await prisma.user.findMany({
where: {
enabled: true,
posts: {
some: {
post_id: { in: posts_array },
post: {
enabled: true // for constraint 1 (only check/match against the post_ids in post array which are enabled)
}
},
},

},

include: {
_count: { select: { posts: true } },
posts: {
select: { post: true },
where: {
post: {
enabled: true // for constraint 2 (only include the posts which are enabled)
}
}
},
},
})

请记住,users[SOME_IDX]._count.posts 将包含该用户的所有帖子数(包括那些被禁用 的帖子)。如果您只想要启用帖子的数量,则必须检查 users[SOME_IDX].posts 数组的长度。

顺便说一句,根据您的架构,user_to_post 表有些多余。你可以使用 implicit many-to-many对帖子和用户之间的关系进行建模。

关于typescript - 棱镜 : select on many to many with multiple conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69976801/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com