wcdb icon indicating copy to clipboard operation
wcdb copied to clipboard

模型嵌套的情况,能够直接获取到完整的模型吗?

Open CoooooooderJ opened this issue 5 years ago • 4 comments

WCDB.swift v1.0.8 via Cocoapods

在 wiki 中,只有通过 TableCodable 、 CodingKeys 协议 以及 ORM 对基础类型进行映射的示例。 对于模型嵌套的情况(可能存在 一对一、一对多和多对多的表关系), 例如,

struct Person {
    var name: String? = nil
    var dogs: [Dog]? = nil
}

struct Dog {
    var name: String?
    var ownerID: Int?
}

这种情况,能够通过某种协议或者模板,直接从数据库获取到完整的person对象实例吗?还是说需要先拿到 person, 然后根据 person 的 id 再去用事务查一次数据库?如果能够直接拿到, how?如果不能, 二次查询有没有一种 best practice 呢?

类似于 #126 和 #178 。@RingoD 大大给出的解释都是参照 Column Coding。实际上 dog 并不是 person 表的一列,而是另外一个表, column coding 还能够适用吗? 希望有大大解惑哈。 另外多谢开源这么棒的库🌸🌸🌸

CoooooooderJ avatar May 27 '20 05:05 CoooooooderJ

wcdb的orm只支持一层,嵌套需要联表的情况只能自己二次查询了,dogs是person的数组的时候定义column coding没有什么用,因为对于数组是用codable/nscoding直接转成data存进dogs列里面的。

所以,要么一把梭,要么自己联表。

cntrump avatar Nov 02 '20 00:11 cntrump

swift版本文档的做法是错的,具体要怎么做

ZClee128 avatar Mar 10 '21 06:03 ZClee128

swift版本文档的做法是错的,具体要怎么做

Model 里的子 Model 整体存进列里面,不需要为子 Model 建表。

cntrump avatar Mar 10 '21 06:03 cntrump

这个我知道,但是序列也是需要方法呀

static var columnType: ColumnType {
        return .BLOB
    }

required init?(with value: FundamentalValue) {
    let data = value.dataValue
    guard data.count > 0 else {
        return nil
    }

}

func archivedValue() -> FundamentalValue {
    
    return FundamentalValue(nil)
}

官方给出是这样的,但是根本行不通

ZClee128 avatar Mar 10 '21 06:03 ZClee128

Nested models can only be read in multiple steps.

Qiuwen-chen avatar Apr 26 '23 07:04 Qiuwen-chen