如何在Fluent Vapor 4中移除关联筛选后的重复项?
在Fluent Vapor中移除关联筛选后的重复查询结果
当通过siblings关联筛选Attraction数据时,由于单个Attraction可能关联多个符合条件的MetaTag,查询结果会出现重复的Attraction实例。你可以通过Fluent提供的distinct(on:)方法来实现去重:
修改后的代码如下:
let queryBuilder = Attraction.query(on: req.db) if let metaTagIds = attractionSearch.metaTagIds, metaTagIds.count > 0 { queryBuilder.join(siblings: \.$metaTags) queryBuilder.filter(MetaTag.self, \.$id ~~ metaTagIds) // 基于Attraction的主键id去重 queryBuilder.distinct(on: \.$id) }
补充说明
distinct(on: \.$id)会告诉数据库只返回每个id对应的唯一Attraction记录,彻底消除关联查询带来的重复项。- 如果你的数据库支持(如PostgreSQL),也可以直接调用无参的
queryBuilder.distinct(),它会根据查询的所有字段进行去重,但明确指定主键字段的方式逻辑更清晰,兼容性更强。
内容的提问来源于stack exchange,提问作者Mitul Pokiya
相关产品推荐
相关产品推荐

