领域 - 从孩子的角度获取所有孩子的所有父母的列表

时间:2017-05-05 09:45:39

标签: swift realm parent-child predicate

在我使用Realm和Swift编写的游戏中,我正试图建立这种关系;

Locomotive -> Engine <- Player

  • Player有许多Engines
  • Locomotive有许多Engines

作为旁注,玩家只能从一个机车(父母)拥有一个引擎(孩子)。

我想获得玩家使用Realm和NSPredicates所拥有的所有孩子的所有父母的列表。

也就是说,给定一个玩家实体;列出玩家拥有的所有引擎的所有父级,并按成本对父级对象进行排序。

由于应用程序不直接知道哪个玩家拥有什么机车,我想查询玩家拥有的引擎以找出他们拥有的机车。

我觉得在机车实体中有两个关系(一个用于所有引擎,一个用于所有玩家),当该信息可以通过其子对象获取时,我觉得有点过分。

具体来说,我想要一个玩家拥有的所有机车的列表,通过引擎实体按成本排序。 (我希望这是有道理的)

我项目的相关代码如下:

// Locomotive entity

public class Locomotive: Object {
   var engines = List<Engine>()
   private(set) dynamic var cost: Int = 0
}

// Engine entity

public class Engine: Object {
    private let parents = LinkingObjects(fromType: Locomotive.self, property: "engines")
    private let owners = LinkingObjects(fromType: Player.self, property: "engines")

}

// Player entity

public class Player: Object {
    public let engines = List<Engine>()
}

    // Give me a list of all locomotives I own through the engines entity
// and sort the locomotives by cost

        let predicate = NSPredicate(format: "ANY engines.owners == %@", firstPlayer)

        let allLocos = realm.objects(Player.self)
            .filter(predicate)

        print (allLocos.count)

虽然这给了我一个玩家拥有的所有引擎的列表,但它没有给我机车列表(或按成本分类)

因此我的查询是:

如何从玩家拥有的所有孩子那里获取所有父母(机车)的清单,并确保排序顺序是按成本计算的?

我希望我已正确解释了我的问题,并欢迎我的查询可能带来任何帮助和帮助。

由于

1 个答案:

答案 0 :(得分:1)

如果我在给定Player对象的情况下读取了该权限,则需要检索Locomotive对象的列表,这些对象是Engine对象的父对象,它们是Player对象的父对象。 {1}}对象。

您应该能够使用Locomotive对象的Player属性对engines对象进行查找。它看起来像这样(虽然不可否认,这是未经测试的):

let player = // Get the player
let locomotives = realm.objects(Locomotive.self).filter("ANY self IN %@", player.engines)