【发布时间】:2021-10-16 01:22:54
【问题描述】:
我有一个包含多个表的数据库,经常需要使用LEFT JOIN 查询这些表,以便结果包含来自其他表的聚合数据。我的 Prisma 架构中的片段:
model posts {
id Int @id @unique @default(autoincrement())
user_id Int
movie_id Int @unique
title String @db.Text
description String? @db.Text
tags Json?
created_at DateTime @default(now()) @db.DateTime(0)
image String? @default("https://picsum.photos/400/600/?blur=10") @db.VarChar(256)
year Int
submitted_by String @db.Text
tmdb_rating Decimal? @default(0.0) @db.Decimal(3, 1)
tmdb_rating_count Int? @default(0)
}
model ratings {
id Int @unique @default(autoincrement()) @db.UnsignedInt
entry_id Int @db.UnsignedInt
user_id Int @db.UnsignedInt
rating Int @default(0) @db.UnsignedTinyInt
created_at DateTime @default(now()) @db.DateTime(0)
updated_at DateTime? @db.DateTime(0)
@@id([entry_id, user_id])
}
如果我想在查询 posts 时返回平均评分,我可以使用如下查询:
SELECT
p.*, ROUND(AVG(rt.rating), 1) AS user_rating
FROM
posts AS p
LEFT JOIN
ratings AS rt ON rt.entry_id = p.id
GROUP BY p.id;
我不确定如何/是否可以使用 Prisma 实现类似的功能,因为就目前而言,这似乎需要两个单独的查询,这不是最佳的,因为有时需要 2或来自其他表的 3 个连接或 SELECTs。
如何在 Prisma 中进行查询/模型/某事以实现上述目标?
【问题讨论】:
标签: mysql node.js prisma prisma2