Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 如何在领域中进行嵌套查询_Swift_Realm - Fatal编程技术网

Swift 如何在领域中进行嵌套查询

Swift 如何在领域中进行嵌套查询,swift,realm,Swift,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 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())
}
我试着在
动态var车站的
类Train:RLMObject
中获取车站和车站相关车站的所有列车部分:车站?
。首先,我从相关站点的代码中生成一个字符串,然后使用“IN”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'
如何对此问题进行嵌套查询?
我不熟悉swift、objective-С和realm(

您可能已经猜到了,您必须将该查询分解为多个查询。不过,首先,让我们重构
trainsForDepartureStation()
,以更好地了解它当前正在做什么:

func trainsForDepartureStation(station: Int) -> RLMResults? {
  let stations = Station.objectsWhere("code == \(station)")
  if let related = stations.lastObject() as? Station where related.relatedStations.count > 0 {
    return Train.objectsWhere("stationDeparture IN %@", related.relatedStations)
  } else {
    return Train.objectsWhere("stationDeparture.code == \(station)")
  }
}
好的,现在让我们将其更改为返回“所有列车路线上所有车站的列车”:


只有一个错误,这部分:

    let allRelatedStations = Station.objectsWhere("relatedStations IN %@", related.relatedStations)
    let allRelatedRoutes = Route.objectsWhere("station IN %@", allRelatedStations)
应替换为:

    let allRelatedRoutes = Route.objectsWhere("station IN %@", related.relatedStations)

因为allRelatedStations没有获取相关站点,但再次仅获取父站点)

这适用于仅具有相关站点的路由,如果父站点和相关站点都存在路由,如何连接此结果?将这两个查询与“或”组合以连接。
    let allRelatedRoutes = Route.objectsWhere("station IN %@", related.relatedStations)