【问题标题】:Realm iOS relationship from mysql json results来自mysql json结果的领域iOS关系
【发布时间】:2015-08-23 16:49:14
【问题描述】:

我想在我的 iOS 应用程序中使用 Realm,但我的关系有问题。我想要实现的是以下两个RLMobjects之间的关系:

class Catalogue: RLMObject {

     dynamic var ID = ""
     dynamic var greekName = ""
     dynamic var deutschName = ""
     dynamic var createdAt = NSDate()
     dynamic var updatedAt = NSDate()

     override class func primaryKey() -> String? {
        return "ID"
    }
}

class Products: RLMObject {

     dynamic var foodName = ""
     dynamic var foodDescription = ""
     dynamic var foodPrice = ""
     dynamic var createdAt = NSDate()
     dynamic var updatedAt = NSDate()

     dynamic var category: Catalogue?
}

我正在以JSON 格式从服务器检索我的所有数据,问题是

我无法将类别设置为与目录 ID 的关系。

在我的数据库中,类别字段是目录 ID 的外键。

有谁知道我如何在 Realm 中做到这一点?

提前谢谢你。

【问题讨论】:

    标签: ios relationship realm


    【解决方案1】:

    您需要找到目录对象并直接存储它,而不是将目录 ID 存储在 dynamic var category: Catalogue? 关系字段中。这是链接对象的方式,也是使用 NoSQL 类型数据库(如 Realm)的重要且强大的部分。

    我还会在 Catalog 上添加一个 products 关系数组,以便您可以将所有产品链接到 Catalog 本身。

    如果不完全清楚,您可以查看有关此here 的更多讨论。希望这会有所帮助

    【讨论】:

    • 你能给我一个代码示例吗?我也阅读了链接,但对我来说不是很清楚。设置category(即Catalogue ID)的唯一方法是String,我没有任何关系。
    • 假设您的 CatalogueID = 47。首先您需要获取该目录对象let catalogObject = Realm().objectForPrimaryKey(Catalogue.self, CatalogueID: "47") 然后您可以获取您的产品之一let product = Product() 并执行product.catagory = catalogObject。现在,当您存储 product 时,它将链接到正确的类别。请注意,链接是通过直接链接对象而不是通过 foreign_key 创建的。让我知道这是否清楚
    • 关于链接我明白了。我从我的数据库中获取类别 ID 作为数字。老实说,我无法理解如何将此号码链接到Catalague。我可以给你一个 Json 结果{ "category_id" = 2; "created_at" = "2015-08-16 17:51:40"; "food_description" = "Hausgemachtes Knoblauchbrot"; name = Skordopsomo; price = "2,50"; "updated_at" = "2015-08-16 17:51:40"; } 我如何链接到那个category_id?我想做的是从 Json 结果中读取它,然后创建与Catalogue.ID 的关系。
    • 好的,谢谢@yoshyosh 的帮助。我根据您的示例对其进行了修复,但在新的 Swift 中,我像 let catalogueObject = Catalogue(forPrimaryKey: products["category_id"] as! String) 一样使用它。现在我必须学习如何根据这种关系进行查询。
    • 啊,是的,很抱歉!太好了,所以如果你想获得该目录中的所有产品,你可以做Realm().objects(Products).filter("category = %@", catalogueObject)。如果是同一个 Catalog 对象,其 category_id 为 2,这将返回属于该目录的所有产品。