You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 20:07:35