2017-05-05 138 views
0

在我使用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) 

雖然這給了我所有的引擎,玩家擁有的列表,它並沒有給我的機車名單(或按成本排序)

因此,我的查詢是:

我如何從玩家擁有的所有孩子中獲取所有父母(機車)的列表,並確保排序順序是按成本計算的?

我希望我已經正確解釋了我的問題,並歡迎任何可能由我的查詢產生的幫助和幫助。

感謝

+0

順便說一句,我能夠從機車側拿到名單,但之後我從玩家身邊。 – zardon

回答

1

如果我沒有看錯,給予Player對象,要檢索的Locomotive對象是Engine對象是Player對象的孩子的父母的列表。

你應該能夠做一個對查找使用Player對象的engines屬性Locomotive對象。它看起來是這樣的(雖然無可否認,這是未經測試):

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

是的,這是我目前正在做它的方式(以及它的一個版本)。我試圖看看我是否可以採用相反的方式 - 但事實證明這有點困難。而不管;我打算接受你的回答 – zardon

+0

酷!謝謝!等等,反過來呢?那麼,就像採用一個'Locomotive'並計算可能與它共享'Engine'對象的任何'Player'對象? – TiM

+0

不理我,我迷惑自己。如查詢中所述。我想'給一個球員實體;列出玩家擁有的所有引擎的所有父母,並按成本對父母對象進行排序。「我相信你的答案確實解決了這個問題 – zardon

相關問題