不支持视图实体,这几乎是您所要求的 - 您可以在此处订阅:
https://github.com/mikro-orm/mikro-orm/issues/672
您可以通过查询生成器执行您想要的查询(或直接执行原始 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();
或作为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();
在 v4 中,你也可以使用@Filter()
它,你可以定义一个子查询来给你计数:
https://github.com/mikro-orm/mikro-orm/blob/dev/docs/docs/defining-entities.md#formulas