版权声明:本文为Martin原创文章,未经Martin允许不得转载。 https://blog.csdn.net/qq_36279445/article/details/88825839
async getPostListFollowingFeed(pageIndex: number, pageSize: number, user:User) {
const userId = user.id;
const userRepository = getCustomRepository(UserRepository);
const userQb = userRepository
.createQueryBuilder('user')
.select(`cast( jsonb_array_elements ( "user".follows ) ->> 'objectId' AS uuid ),
jsonb_array_elements ( "user".follows ) ->> 'objectType' AS otype `)
.where('user.id = :userId', { userId });
const posts = await this
.createQueryBuilder('post')
.where((qb: any) => {
const subQuery = qb
.subQuery()
.select('"tempTb".uuid')
.leftJoin('user', 'u', 'u.id = "tempTb".uuid')
.from(`( ${ userQb.getQuery()} )`, 'tempTb')
.setParameters(userQb.getParameters())
.where(`"tempTb".otype = 'user' AND u.status = :status`, { status: AccountStatus.Active })
.getQuery();
// tslint:disable-next-line:prefer-template
return 'post.user_id IN ' + subQuery;
})
.getMany();
return posts;
}
生成的sql
SELECT
...
"post"."id" AS "post_id"
...
FROM
"post" "post"
WHERE
"post"."user_id" IN (
SELECT
"tempTb".uuid
FROM
(
SELECT CAST
( jsonb_array_elements ( "user".follows ) ->> 'objectId' AS uuid ),
jsonb_array_elements ( "user".follows ) ->> 'objectType' AS otype
FROM
"user" "user"
WHERE
"user"."id" = 'bd8d86a9-247d-4f74-a8db-a935295b4520'
) "tempTb"
LEFT JOIN "user" "u" ON "u"."id" = "tempTb".uuid
WHERE
"tempTb".otype = 'user'
AND "u"."status" = 'active')