我有一个数据库,其中包含多个表格,经常需要使用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 AVG(rating) FROM 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个连接或SELECT
操作。
我该如何在Prisma中创建一个查询/模型/某些东西来实现上述要求?