大家好,我在使用嵌套对象查询归档一件事时遇到了困难。我有两个领域对象锦标赛和比赛。
class Championship: Object {
dynamic var id: Int = 0
dynamic var name: String = ""
let games = List<Game>
override static func primaryKey() -> String? {
return "id"
}
}
class Game: Object {
dynamic var id: Int = 0
dynamic var homeTeamName: String = ""
dynamic var awayTeamName: String = ""
dynamic var status: String = "" //"inprogress", "finished", "scheduled"
override static func primaryKey() -> String? {
return "id"
}
}
基本上我想要检索所有拥有状态为“inprogress”的游戏的锦标赛,所以我要归档的是:
let realm = try! Realm()
realm.objects(Championship.self).filter("ANY games.status = 'inprogress'")
这个查询正在做的是给我所有至少有一个具有该状态的比赛的冠军,但也给了我所有的比赛,但实际上我只是希望比赛具有“进步”状态。
有没有办法做到这一点?
答案 0 :(得分:2)
你可以在这里采取两种方法。如果您想要所有具有inprogress
状态的游戏,您可以写下:
let inProgressGames = realm.objects(Championship.self)
.flatMap { $0.games }
.filter { $0.status == "inprogress" }
这将返回[Game]
数组中正在进行的所有游戏。 flatMap
用于合并所有锦标赛的所有游戏,filter
用于过滤所有inProgress
状态的游戏。
如果你想要每场比赛都是inprogress
的锦标赛你可以写:
let inProgressChampionships = realm.objects(Championship.self).filter {
let inProgressGames = $0.games.filter { $0.status == "inprogress"}
return $0.games.count == inProgressGames.count
}
这将返回Championship
的数组,其中每个游戏都是inprogress
。
除此之外,我建议使用enum
作为游戏状态而不是硬编码字符串。