我正在尝试更新firebase中的子值。 用户首先会创建一个新订单,它会创建两个节点,一个在主订单部分,第二个在用户下面,以保持清洁记录。这似乎有效,但我正在努力更新值
然后当他在表单上并进行更新时,我希望firebase在firebase上同时更新。当我尝试使用observe方法时,如何访问该特定键,因为似乎没有任何效果。
访问表单所在的密钥并更新值的最佳方法是什么?
答案 0 :(得分:1)
这是您在Firebase中更新值的方法:
func updateDatabaseForEdits() {
let updates : [AnyHashable: Any] = ["variableName": value,
"variableName2": value]
ref.child("COrders").child("specificKeyYouWantToEdit").updateChildValues(updates, withCompletionBlock: { (error, success) in
if error != nil {
// upload failed
return
}
else {
// upload worked
// update your locally stored values
}
})
}
您的应用程序还有其他问题。具体来说,您如何存储数据。您如何知道要访问哪个密钥?我建议您将数据存储更新为:
desikhanapeena {
COrder {
key123 {
orderInformation
}
}
UserOrders {
uid {
key123
orderInformation
}
}
}
如果您有任何疑问,请与我们联系:
如果你想从快照中获取密钥,你可以这样做:
for child in snap.children {
let child = child as? DataSnapshot
if let key = child?.key {
// print(key)
}
}
如果您想在上传之前获取密钥,可以这样做:
let key = ref.child("COrders").childByAutoId().key
答案 1 :(得分:0)
万一你还在寻找答案。
回答问题#1。 您需要更新用户的订单值,如果成功,则从那里获取父密钥(在您的情况下,其AutoID),并使用此密钥更新" Corders"。 这是代码
func updateBothValue(){
let value = ["key":"data","key1": "data2"]
REF.child("Users").child(UID).child("UserCorder").childByAutoId().setValue(value){
error, ref in
guard error == nil else { return }
let key = ref.key
REF.child("Coorders").child(key).setvalue(value)
}
}
对于Prob#2,正如您所写的那样#34;访问该表格所在的密钥"。对于每个表单数据,存储在前面的步骤中从firebase获得的密钥。并使用此密钥进行更新。