CosmicMind / Graph: поиск конкретных связанных объектов - PullRequest
0 голосов
/ 27 августа 2018

Привет всем,

ищет поддержку CoreData фреймворка, называемого Graph из CosmicMind (https://github.com/CosmicMind/Graph).

К сожалению, существует довольно мало документации, выходящей за рамки абсолютных основ (хотя, кажется, есть много довольно мощных концепций, представленных b.t.w.).

Интересно, мог бы кто-нибудь - пожалуйста - помочь мне с тем, как выбирать / фильтровать сущности в отношении 1: N.

Учитывая следующую структуру ...

import Graph

let graph = Graph()
graph.clear()

let sectionA = Entity(type: "Section")
sectionA["id"] = 12
sectionA["name"] = "SectionA"

let sectionB = Entity(type: "Section")
sectionB["id"] = 2
sectionB["name"] = "SectionB"

let unitA = Entity(type: "Unit")
unitA["id"] = 122
unitA["name"] = "UnitA"
unitA["isExpensive"] = false
unitA.is(relationship: "UnitOfSection").of(sectionA)

let unitB = Entity(type: "Unit")
unitB["id"] = 19
unitB["name"] = "UnitB"
unitB["isExpensive"] = false
unitB.is(relationship: "UnitOfSection").of(sectionB)

let unitC = Entity(type: "Unit")
unitC["id"] = 7
unitC["name"] = "UnitC"
unitC["isExpensive"] = true
unitC.is(relationship: "UnitOfSection").of(sectionA)

let unitD = Entity(type: "Unit")
unitD["name"] = "UnitD"
unitD["isExpensive"] = true
unitD["id"] = 4
unitD.is(relationship: "UnitOfSection").of(sectionA)

graph.sync()

let unitsSearch = Search<Entity>(graph: graph).for(types: "Unit")
let units = unitsSearch.sync()

... Я хотел бы получить только те сущности, которые имеют отношение «UnitOfSection» к sectionA И которые имеют свойство «isExорого» со значением false.

Есть идеи, как этого добиться?

Спасибо + наилучшие пожелания

1 Ответ

0 голосов
/ 31 августа 2018

Это должно работать:

let units = Search<Entity>(graph: graph).for(types: "Unit").sync().filter { entity in
    (entity["isExpensive"] as? Bool) == false && 
    entity.relationship(types: "UnitOfSection").contains(where: { relationship in
        relationship.object == sectionA
    })
}

Что мы делаем:

  1. Выбрать все объекты "Юнит"
  2. Отфильтровать объекты, имеющие isExpensive = false
  3. И получить отношения "UnitOfSection" каждой сущности и проверить, является ли объект этой связи sectionA
...