复合主键领域/ swift

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了复合主键领域/ swift相关的知识,希望对你有一定的参考价值。

我是快速和领域的新手。我想制作一个复合主键,当我尝试这样的事情时:

class DbLocation : Object {
 dynamic var id = 0
 dynamic var tourId = 0

 dynamic var uuid : String  {
    return "(id)(tourId)"
 }

 override static func primaryKey() -> String? {
    return "uuid"
 }
}

我收到此错误:'对象'DbLocation'上不存在主键属性'uuid'

任何人都可以帮我解决如何创建复合主键的示例?

答案

这应该给你答案:

class DbLocation: Object {
    dynamic var id = 0
    dynamic var tourId = 0

    func setCompoundID(id: Int) {
        self.id = id
        compoundKey = compoundKeyValue()
    }

    func setCompoundTourId(tourId: Int) {
        self.tourId = tourId
        compoundKey = compoundKeyValue()
    }

    dynamic lazy var compoundKey: String = self.compoundKeyValue()

    override static func primaryKey() -> String? {
        return "compoundKey"
    }

    func compoundKeyValue() -> String {
        return "(id)(tourId)"
    }
}

自定义setter确保复合键始终更新,懒惰关键字确保您第一次访问它时,它将从您已设置的内容中派生出来。

有关此主题的更多信息,请参阅this thread,此问题一直存在争议。

另一答案

简单地创建一个新属性,其值设置为您希望为复合主键的其他属性。

class DbLocation: Object {
            dynamic var id = 0
            dynamic var tourId = 0
            dynamic var compoundKey: String? = ""

        override static func primaryKey() -> String? {
                return "compoundKey"
            }
        }
    let location = DbLocation()
    location.tourId = 1
    location.id = 5
    location.compoundKey = "(id) (tourId)"
另一答案

对于Swift和Realm的最新版本,我会做这样的事情。

dynamic private var compoundKey: String = ""

required convenience init?(map: Map) {
  self.init()
  if let firstValue = map.JSON["firstValue"] as? String,
    let secondValue = map.JSON["secondValue"] as? Int {
    compoundKey = firstValue + "|someStringToDistinguish|" + "(secondValue)"
  }
}
另一答案

你需要从你的对象中返回一个属性

这是示例代码

class FoodModel:Object
{
    dynamic var name = ""
    dynamic var _id  = ""


    override static func primaryKey() -> String? {
        return "_id"
    }
}

请注意,_id在模型中是var

以上是关于复合主键领域/ swift的主要内容,如果未能解决你的问题,请参考以下文章

如何首先在 Entity Framework 4 代码中映射复合主键?

Yesod中的复合主键

Laravel中定义复合主键

Spring用外键保存复合主键

mysql的联合主键与复合主键区别

具有父复合 pk 的 JPA OneToMany 是子主键派生实体问题的一部分