kap*_*v89 2 node.js typescript mikro-orm
假设我有User和一对多 的Post实体。我想获取带有, ,的用户列表。其 sql 查询如下所示:UserPostidusernamepost_count
select u.id, u.username, count(p.id)
from users u left join posts p on u.id = p.user_id
group by u.id
Run Code Online (Sandbox Code Playgroud)
我想将此查询的结果提取到它自己的实体中,例如
class PostsCountPerUser {
id: string;
username: string;
count: number
}
Run Code Online (Sandbox Code Playgroud)
我如何通过 mikro-orm 做到这一点?
不支持视图实体,这正是您所要求的 - 您可以在这里订阅:
https://github.com/mikro-orm/mikro-orm/issues/672
编辑:现在(v5)也有虚拟实体
您可以通过查询生成器执行您想要的查询(或直接执行原始 SQL),并通过以下方式获取 POJO 形式的结果qb.execute():
const res = await em.createQueryBuilder(User, 'u')
.select(['u.id', 'u.username', 'count(p.id) as count'])
.leftJoin('u.posts', 'p')
.groupBy('u.id')
.execute();
Run Code Online (Sandbox Code Playgroud)
或者作为User实体通过qb.getResult(). 对于这种方法,您还需要定义一个非持久属性,然后您可以将 QB 结果映射到该属性 - 在本例中是这样count。
@Entity()
class User {
@Property({ persist: false })
count?: number;
}
const users = await em.createQueryBuilder(User, 'u')
.select(['u.id', 'u.username', 'count(p.id) as count'])
.leftJoin('u.posts', 'p')
.groupBy('u.id')
.getResult();
Run Code Online (Sandbox Code Playgroud)
在 v4 中,您也可以使用@Filter()此方法,您可以定义一个子查询来提供计数:
https://github.com/mikro-orm/mikro-orm/blob/dev/docs/docs/defining-entities.md#formulas
| 归档时间: |
|
| 查看次数: |
7848 次 |
| 最近记录: |