У меня есть область:Как сделать вложенные запросы в Realm
class Train: RLMObject {
dynamic var stationDeparture: Station?
dynamic var trainId = 0
dynamic var route = RLMArray(objectClassName: Route.className())
override class func primaryKey() -> String {
return "trainId"
}
}
class Route: RLMObject {
dynamic var numberInRoute = 0
dynamic var station: Station?
var owners: [Train] {
return linkingObjectsOfClass("Train", forProperty: "Route") as! [Train]
}
}
class Station: RLMObject {
dynamic var code = 0
dynamic var name = ""
override class func primaryKey() -> String {
return "code"
}
dynamic var relatedStations = RLMArray(objectClassName: Station.className())
}
я пытался получить все поезда на станцию и смежные станции станции в class Train: RLMObject
для dynamic var stationDeparture: Station?
. Сначала я создал строку из кодов связанных станций, а затем сделал запрос с использованием «IN» в предикате.
Эта функция работает, некрасиво, но это работает!
func trainsForDepartureStation (station: Int) -> RLMResults? {
let stations = Station.objectsWhere("code == \(station)")
let related = stations.lastObject() as! Station
if related.relatedStations.count > 0 {
var st = ""
st += "{\(station)"
for id in 0...related.relatedStations.count-1 {
st += ", \(related.relatedStations[id].code)"
}
st += "}"
let trains = Train.objectsWhere("stationDeparture.code IN \(st)")
return trains
} else {
let trains = Train.objectsWhere("stationDeparture.code == \(station)")
return trains
}
}
Но когда я попытался сделать то же самое, чтобы получить поезда с всеми станциями во всех маршрутах поезда, он не работает.
let trains = Train.objectsWhere("ANY route.station.relatedStations.code IN \(st)")
Ошибкой является:
'Invalid predicate', reason: 'Predicate with ANY modifier must compare a KeyPath with RLMArray with a value'
Как сделать вложенный запрос для этой проблемы? Я новичок в быстрой, Objective-с и области (
эта работа для маршрутов только связанных станций, как сцепить это приводит, если маршруты существуют как для материнской станции, так и для связанных станций? –
объединить эти два запроса с «OR» для объединения. – jpsim