如何使用Fluent在Vapor 3的同一张表中进行两个JOIN查询?

区域

这就是我想要做的(使用PostgreSQL):

选择H.“名称”,A。“名称”

从“比赛” M

加入“团队” H ONM。“ homeTeamID” = H.id

加入“ Teams” A ON M.“ awayTeamID” = A.id

//This will give me an error

return Matches.query(on: request)
.join(\Teams.id, to: \Matches.homeTeamID)
.alsoDecode(Teams.self)
.join(\Teams.id, to: \Matches.awayTeamID)
.alsoDecode(Teams.self)

这是错误:

{

错误:是的,

原因:“表名“ Team”指定了多次”

}

任何帮助表示赞赏!谢谢!

Mixio

@arema,我尝试重现您的用例,并且Fluent也遇到类似的问题。我在Fluent的github上报告了这个问题:https : //github.com/vapor/fluent/issues/563

这是一种解决方法,但远非优雅。

// Requires conforming `Match` to hashable, Equatable.
func getMatches2Handler(_ req: Request) throws -> Future<[MatchObjects]> {
    return map(
        to: [MatchObjects].self,
        Match.query(on: req).join(\Team.id, to: \Match.homeTeamID).alsoDecode(Team.self).all(),
        Match.query(on: req).join(\Team.id, to: \Match.awayTeamID).alsoDecode(Team.self).all()
    ) { homeTuples, awayTuples in
        let homeDictionary = homeTuples.toDictionary()
        let awayDictionary = awayTuples.toDictionary()
        var matchObjectsArray: [MatchObjects] = []
        matchObjectsArray.reserveCapacity(homeDictionary.count)
        for (match, homeTeam) in homeDictionary {
            let awayTeam = awayDictionary[match]!
            matchObjectsArray.append(MatchObjects(match: match, homeTeam: homeTeam, awayTeam: awayTeam))
        }
        return matchObjectsArray
    }
}

//...

extension Array {
    func toDictionary<K,V>() -> [K:V] where Iterator.Element == (K,V) {
        return self.reduce([:]) {
            var dict:[K:V] = $0
            dict[$1.0] = $1.1
            return dict
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在MySQL的同一张表上使用join合并这两个查询?

如何从同一张表中查询同一列但条件不同的两个不同的总和?

MySQL:如何在单个查询的同一张表中进行选择和删除?

如何在Postgresql中将两个选择查询水平组合在同一张表上?

MySQL 从一张表中选择唯一记录,并使用 NOT IN 进行两个选择查询

当两个外键指向同一张表时如何使用Factory boy

SQLAlchemy如何为同一张表定义两个模型

如何从orientDB的同一张表中检索两个不同边的数据?

如何合并同一张表中的两个hasMany关系?

PostgreSQL-它会在同一张表上使用两个索引吗?

使用 UNION ALL 将两个查询合并为一张表

使用 UNION ALL 将两个查询合并为一张表

使用group by查询同一张表中的同一列两次

EF 6如何将两个外键设置到同一张表

MYSQL:同一张表上的两个联接成为双重分组计数。如何解决?

同一张表上的两个外键:如何在删除级联上实现?

如何使用 Django 的 ORM 对同一张表进行内部连接查询

如何使用 tensorboardX 在同一张图表上获得两个标量?

Splunk:如何在一张时间表/图表中进行两次搜索?

在Vapor 4中使用Fluent进行复杂的查询

Symfony 2 /教义2:同一张表的两个实体,一个使用另一个

如何在同一张表中的同一模板上显示来自两个不同Django模型的实例?

如何使用同一张表的2个实例

使用两个WHERE条件从同一张表中两次选择一列SQL SERVER

如何计算同一张表中的两个独立列并将它们累加到一个新列中

如何子查询同一张表

如何在Vapor 3 / Fluent中记录SQL语句?

如何在mysql的同一张表的不同列中添加两个或多个时间数据类型

如何使用Seaborn在同一张图上绘制两个小提琴系列图?