在我使用 Realm 和 Swift 编写的游戏中,我正在尝试建立这种关系;
Locomotive -> Engine <- Player
Player
有很多Engines
- 一个
Locomotive
有很多Engines
作为旁注,玩家只能拥有一台机车(父级)的一个发动机(子级)。
我想得到一个玩家使用 Realm 和 NSPredica tes拥有的所有孩子的所有父母的列表。
也就是说,给定一个玩家实体;列出玩家拥有的所有引擎的所有父对象,并按成本对父对象进行排序。
由于该应用程序无法直接知道哪个玩家拥有什么机车,我想对玩家拥有的发动机进行查询,以了解他们拥有的机车。
我觉得在机车实体中有 2 个关系(一个用于所有引擎,一个用于所有玩家)有点矫枉过正,因为这些信息可以通过其子对象进行获取。
具体来说,我想要一个玩家拥有的所有机车的列表,通过引擎实体按成本排序。 (我希望这是有道理的)
我的项目的相关代码如下;
// 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)
虽然这给了我玩家拥有的所有引擎的列表,但它没有给我机车列表(或按成本排序)
因此,我的查询是:
如何从玩家拥有的所有子项中获取所有父项(机车)的列表,并确保排序顺序按成本排列?
我希望我已经正确解释了我的问题,并欢迎我的查询可能产生的任何帮助和帮助。
谢谢
如果我没看错,给定一个Player
对象,您希望检索Locomotive
对象的列表,这些对象是该Player
对象的子对象的Engine
对象的父级。
您应该能够使用Locomotive
对象的engines
属性对Player
对象执行查找。它看起来像这样(尽管不可否认,这是未经测试的):
let player = // Get the player
let locomotives = realm.objects(Locomotive.self).filter("ANY self IN %@", player.engines)