0

1対多のエンティティがあるUserとします。、、でユーザーのリストを取得したい。このための SQL クエリは次のようになります。PostUserPostidusernamepost_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

次のように、このクエリの結果を独自のエンティティにフェッチしたい

class PostsCountPerUser {
  id: string;
  username: string;
  count: number
}

mikro-orm 経由でこれを行うにはどうすればよいですか?

4

1 に答える 1

2

ビューエンティティはサポートされていません。これは、あなたが求めているものとほぼ同じです-ここで購読できます:

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

于 2020-07-26T21:26:14.943 に答える