领域过滤器问题
Realm Filter Issue
我有 Inventory Model
和 Stock Model
作为领域对象,其中 Inventory
将保存为产品类别名称(例如 COKE / PEPSI),并且 Stock
作为产品名称(例如 Coke Regular、Coke Light、Coke Vanilla)
在我的父 Table 中,TableView 正在显示
- 可乐 - 150 离开
- 百事可乐 - 数量 剩余
当 selectedRowAt
COKE 时,tableView 将实例化到另一个名为 StockTable 的 TableView,这将显示
- 普通可乐:还剩 100 单位
- 可口可乐:还剩 30 个单位
- 可口可乐香草:还剩 20 单位
目前在 ParentTable
处点击时我有一个带有 2 个选项的按钮:
- 显示数量超过 1 的所有库存 = 问题
- 显示没有数量计数的所有库存 = 执行中
我在过滤和查询选项 1 时遇到问题,因此 "totalUnit"
是在每次执行 realm.write
更新 totalUnit
时自动更新创建的,这是非常危险的错误的 information/data 项。
对我来说,我想根据 StockModel's quantity
sum(property:"quantity")
查询数据,而不是更新 realm.write
中的 totalUnit
因为这对未来和防止错误。
所以我创建了两个函数
showStockList_byTotalUnit() -> Results<StockModel>
目前正在使用
showStockList_byStockQuantity() -> [StockModel]
两者都按照我想看到的结果工作,但是,我不确定使用 [StockModel]
是否与 Results<StockModel>
相同,因为我所有其他 tableView 都基于Results<Object>?
而不是 Array
.
问题
- 我想从
InventoryModel
中去掉totalUnit
,实现ParentTable从自身StockModel's quantity
中显示总单位
- 我可以将
[StockModel]
转换为 Results<StockModel>
吗?
showStockList_byStockQuantity
我可能会遇到什么问题吗?
class InventoryModel:Object {
@objc dynamic var name:String = ""
@objc dynamic var info:String = ""
@objc dynamic var category:String = ""
@objc dynamic var totalUnit:Int = 0 **THIS IS UPDATED BASED ON USER DELETE/ADD DATA, WISH TO REMOVE THIS**
///Childs
var ofStock = List<StockModel>()
class StockModel:Object {
@objc dynamic var name:String = ""
@objc dynamic var quantity:Int = 0
@objc dynamic var purchasePrice:Double = 0
@objc dynamic var totalCost:Double = 0
@objc dynamic var purchaseDate:Date?
///Parent
var parentInventory = LinkingObjects(fromType: InventoryModel.self, property: "ofStock")
**InventoryModel**
func showStockList_byTotalUnit() -> Results<StockModel>? {
let showActiveStock = self.ofStock.sorted(byKeyPath: "name", ascending: true).distinct(by: ["name"]).filter("totalUnit > %@",0)
return showActiveStock
}
**Inventory Model**
func showStockList_byStockQuantity() -> [StockModel] {
let allStocks = self.ofStock.sorted(byKeyPath: "name", ascending: true).distinct(by: ["name"])
var activeStocks:[StockModel] = []
for stock in allStocks.enumerated() {
let stockQuantity:Int = realm!.objects(StockModel.self).filter("name == %@", stock.element.name).sum(ofProperty: "quantity")
if stockQuantity > 0 {
activeStocks.append(stock.element)
}
}
return activeStocks
}
让我缩短并重复这个问题
The objective is to get the qty of a particular InventoryModel based on the
StockModel quantities stored in the ofStock list. (instead of storing
it in InventoryModel totalUnit property).
使用问题中的 InventoryModel 和 StockModel,如果我们为小部件创建库存模型
let inv = InventoryModel()
inv.name = "Widget"
然后将两个 StockModel 对象添加到其 ofStock 列表
let sm0 = StockModel()
sm0.quantity = 1
let sm1 = StockModel()
sm1.quantity = 2
inv.ofStock.append(objectsIn: [s0, s1])
如果我们随后想要获取可用于 Widget 对象的总库存,这是一行
let sum: Int = realm.objects(StockModel.self).filter("ANY parentInventory.name == 'Widget'").sum(ofProperty: "quantity")
print(sum)
输出为 3
请注意,我们正在回溯 StockModels 以获取它们所属的父级。
编辑
OP 还希望有一个查询来执行以下操作(来自评论)
I want to query for all InventoryModels that have ANY stock models
that have a quantity > 0
这是 returns 所有 InventoryModel 对象的查询,其中 ofStock 属性 中的任何 StockModel 的数量 属性 大于 0
let results = realm.objects(InventoryModel.self).filter("ANY ofStock.quantity > 0")
我有 Inventory Model
和 Stock Model
作为领域对象,其中 Inventory
将保存为产品类别名称(例如 COKE / PEPSI),并且 Stock
作为产品名称(例如 Coke Regular、Coke Light、Coke Vanilla)
在我的父 Table 中,TableView 正在显示
- 可乐 - 150 离开
- 百事可乐 - 数量 剩余
当 selectedRowAt
COKE 时,tableView 将实例化到另一个名为 StockTable 的 TableView,这将显示
- 普通可乐:还剩 100 单位
- 可口可乐:还剩 30 个单位
- 可口可乐香草:还剩 20 单位
目前在 ParentTable
处点击时我有一个带有 2 个选项的按钮:
- 显示数量超过 1 的所有库存 = 问题
- 显示没有数量计数的所有库存 = 执行中
我在过滤和查询选项 1 时遇到问题,因此 "totalUnit"
是在每次执行 realm.write
更新 totalUnit
时自动更新创建的,这是非常危险的错误的 information/data 项。
对我来说,我想根据 StockModel's quantity
sum(property:"quantity")
查询数据,而不是更新 realm.write
中的 totalUnit
因为这对未来和防止错误。
所以我创建了两个函数
showStockList_byTotalUnit() -> Results<StockModel>
目前正在使用showStockList_byStockQuantity() -> [StockModel]
两者都按照我想看到的结果工作,但是,我不确定使用 [StockModel]
是否与 Results<StockModel>
相同,因为我所有其他 tableView 都基于Results<Object>?
而不是 Array
.
问题
- 我想从
InventoryModel
中去掉totalUnit
,实现ParentTable从自身StockModel's quantity
中显示总单位
- 我可以将
[StockModel]
转换为Results<StockModel>
吗? showStockList_byStockQuantity
我可能会遇到什么问题吗?
class InventoryModel:Object {
@objc dynamic var name:String = ""
@objc dynamic var info:String = ""
@objc dynamic var category:String = ""
@objc dynamic var totalUnit:Int = 0 **THIS IS UPDATED BASED ON USER DELETE/ADD DATA, WISH TO REMOVE THIS**
///Childs
var ofStock = List<StockModel>()
class StockModel:Object {
@objc dynamic var name:String = ""
@objc dynamic var quantity:Int = 0
@objc dynamic var purchasePrice:Double = 0
@objc dynamic var totalCost:Double = 0
@objc dynamic var purchaseDate:Date?
///Parent
var parentInventory = LinkingObjects(fromType: InventoryModel.self, property: "ofStock")
**InventoryModel**
func showStockList_byTotalUnit() -> Results<StockModel>? {
let showActiveStock = self.ofStock.sorted(byKeyPath: "name", ascending: true).distinct(by: ["name"]).filter("totalUnit > %@",0)
return showActiveStock
}
**Inventory Model**
func showStockList_byStockQuantity() -> [StockModel] {
let allStocks = self.ofStock.sorted(byKeyPath: "name", ascending: true).distinct(by: ["name"])
var activeStocks:[StockModel] = []
for stock in allStocks.enumerated() {
let stockQuantity:Int = realm!.objects(StockModel.self).filter("name == %@", stock.element.name).sum(ofProperty: "quantity")
if stockQuantity > 0 {
activeStocks.append(stock.element)
}
}
return activeStocks
}
让我缩短并重复这个问题
The objective is to get the qty of a particular InventoryModel based on the StockModel quantities stored in the ofStock list. (instead of storing it in InventoryModel totalUnit property).
使用问题中的 InventoryModel 和 StockModel,如果我们为小部件创建库存模型
let inv = InventoryModel()
inv.name = "Widget"
然后将两个 StockModel 对象添加到其 ofStock 列表
let sm0 = StockModel()
sm0.quantity = 1
let sm1 = StockModel()
sm1.quantity = 2
inv.ofStock.append(objectsIn: [s0, s1])
如果我们随后想要获取可用于 Widget 对象的总库存,这是一行
let sum: Int = realm.objects(StockModel.self).filter("ANY parentInventory.name == 'Widget'").sum(ofProperty: "quantity")
print(sum)
输出为 3
请注意,我们正在回溯 StockModels 以获取它们所属的父级。
编辑
OP 还希望有一个查询来执行以下操作(来自评论)
I want to query for all InventoryModels that have ANY stock models that have a quantity > 0
这是 returns 所有 InventoryModel 对象的查询,其中 ofStock 属性 中的任何 StockModel 的数量 属性 大于 0
let results = realm.objects(InventoryModel.self).filter("ANY ofStock.quantity > 0")