将数据存储在具有关系 swift 的领域数据库中
storing data in realm database with relationships swift
所以我第一次尝试在我的应用程序中使用领域数据库。我正在尝试在数据库中创建关系。
这里是 json
{
"id": 1,
"name": "Definizioni generali - Doveri nell'uso della strada",
"image": "559",
"video": "0",
"created_at": "2019-03-14 22:27:23",
"updated_at": "2019-03-14 22:27:23",
"sections": [
{
"id": 3110,
"chapter_id": 1,
"name": "a) Definizioni stradali e di traffico",
"created_at": "2019-03-14 22:30:52",
"updated_at": "2019-03-14 22:30:52"
},
{
"id": 3123,
"chapter_id": 1,
"name": "b) Definizioni e classificazione dei veicoli",
"created_at": "2019-03-14 22:30:52",
"updated_at": "2019-03-14 22:30:52"
},
{
"id": 3131,
"chapter_id": 1,
"name": "c) Doveri del conducente nell'uso della strada - Convivenza civile e uso responsabile della strada",
"created_at": "2019-03-14 22:30:52",
"updated_at": "2019-03-14 22:30:52"
},
{
"id": 3137,
"chapter_id": 1,
"name": "d) Riguardo verso gli utenti deboli della strada",
"created_at": "2019-03-14 22:30:52",
"updated_at": "2019-03-14 22:30:52"
}
]
}
这是我的章节class
class Chapter: Object, Mappable {
@objc dynamic var id:Int = -1
@objc dynamic var name: String = kBlankString
@objc dynamic var image: String = kBlankString
@objc dynamic var video: String = kBlankString
@objc dynamic var createdAt: String = kBlankString
@objc dynamic var updatedAt: String = kBlankString
var sections = List<Section>()
override static func primaryKey() -> String? {
return "id"
}
required convenience init?(map: Map) {
self.init()
}
func mapping(map: Map) {
id <- map["id"]
name <- map["name"]
image <- map["image"]
video <- map["video"]
createdAt <- map["created_at"]
updatedAt <- map["updated_at"]
sections <- map["sections"]
}
}
在这条线上 sections <- map["sections"]
我添加了一个断点并检查了po map["sections"].JSON
这里显示的是数据。
问题是章节存储在数据库中,但每章的章节列表都是空的,这不是真的
这里是 class 部分:
class Section: Object, Mappable {
@objc dynamic var id: Int = -1
@objc dynamic var chapterID: Int = -1
@objc dynamic var name: String = kBlankString
@objc dynamic var createdAt: String = kBlankString
@objc dynamic var updatedAt: String = kBlankString
override static func primaryKey() -> String? {
return "id"
}
required convenience init?(map: Map) {
self.init()
}
func mapping(map: Map) {
id <- map["id"]
chapterID <- map["chapter_id"]
name <- map["name"]
createdAt <- map["created_at"]
updatedAt <- map["updated_at"]
}
}
如果我做错了什么请指导我,这是我第一次尝试使用领域数据库。谢谢
首先,我假设这是使用 ObjectMapper (https://github.com/tristanhimmelman/ObjectMapper),我自己没有使用过。
但问题是您尝试为这些部分做的映射会给您一个数组类型(据我所知),但 Realm 不支持数组(如您所知,正如您所了解的那样)正确使用 List
).
我认为您需要一个自定义转换(https://github.com/tristanhimmelman/ObjectMapper#custom-transforms) to convert to a List<>
type instead. The RealmAdditions 显示了如何执行此操作。这显示了一个等效的行来执行示例代码中您想要的操作 - 重要的一点是这一行(翻译为使用你的类型):
sections <- (map["sections"], ListTransform<Section>())
所以我第一次尝试在我的应用程序中使用领域数据库。我正在尝试在数据库中创建关系。
这里是 json
{
"id": 1,
"name": "Definizioni generali - Doveri nell'uso della strada",
"image": "559",
"video": "0",
"created_at": "2019-03-14 22:27:23",
"updated_at": "2019-03-14 22:27:23",
"sections": [
{
"id": 3110,
"chapter_id": 1,
"name": "a) Definizioni stradali e di traffico",
"created_at": "2019-03-14 22:30:52",
"updated_at": "2019-03-14 22:30:52"
},
{
"id": 3123,
"chapter_id": 1,
"name": "b) Definizioni e classificazione dei veicoli",
"created_at": "2019-03-14 22:30:52",
"updated_at": "2019-03-14 22:30:52"
},
{
"id": 3131,
"chapter_id": 1,
"name": "c) Doveri del conducente nell'uso della strada - Convivenza civile e uso responsabile della strada",
"created_at": "2019-03-14 22:30:52",
"updated_at": "2019-03-14 22:30:52"
},
{
"id": 3137,
"chapter_id": 1,
"name": "d) Riguardo verso gli utenti deboli della strada",
"created_at": "2019-03-14 22:30:52",
"updated_at": "2019-03-14 22:30:52"
}
]
}
这是我的章节class
class Chapter: Object, Mappable {
@objc dynamic var id:Int = -1
@objc dynamic var name: String = kBlankString
@objc dynamic var image: String = kBlankString
@objc dynamic var video: String = kBlankString
@objc dynamic var createdAt: String = kBlankString
@objc dynamic var updatedAt: String = kBlankString
var sections = List<Section>()
override static func primaryKey() -> String? {
return "id"
}
required convenience init?(map: Map) {
self.init()
}
func mapping(map: Map) {
id <- map["id"]
name <- map["name"]
image <- map["image"]
video <- map["video"]
createdAt <- map["created_at"]
updatedAt <- map["updated_at"]
sections <- map["sections"]
}
}
在这条线上 sections <- map["sections"]
我添加了一个断点并检查了po map["sections"].JSON
这里显示的是数据。
问题是章节存储在数据库中,但每章的章节列表都是空的,这不是真的
这里是 class 部分:
class Section: Object, Mappable {
@objc dynamic var id: Int = -1
@objc dynamic var chapterID: Int = -1
@objc dynamic var name: String = kBlankString
@objc dynamic var createdAt: String = kBlankString
@objc dynamic var updatedAt: String = kBlankString
override static func primaryKey() -> String? {
return "id"
}
required convenience init?(map: Map) {
self.init()
}
func mapping(map: Map) {
id <- map["id"]
chapterID <- map["chapter_id"]
name <- map["name"]
createdAt <- map["created_at"]
updatedAt <- map["updated_at"]
}
}
如果我做错了什么请指导我,这是我第一次尝试使用领域数据库。谢谢
首先,我假设这是使用 ObjectMapper (https://github.com/tristanhimmelman/ObjectMapper),我自己没有使用过。
但问题是您尝试为这些部分做的映射会给您一个数组类型(据我所知),但 Realm 不支持数组(如您所知,正如您所了解的那样)正确使用 List
).
我认为您需要一个自定义转换(https://github.com/tristanhimmelman/ObjectMapper#custom-transforms) to convert to a List<>
type instead. The RealmAdditions 显示了如何执行此操作。这显示了一个等效的行来执行示例代码中您想要的操作 - 重要的一点是这一行(翻译为使用你的类型):
sections <- (map["sections"], ListTransform<Section>())