我需要向Firebase注册一个对象。该对象有多个字段,我需要将它们全部写入多个路径。
我的代码:
public func RegisterProductOnDatabase(database dataBase: DatabaseReference)
{
// Run in one transaction
RegisterProductOnDatabase(database: dataBase)
RegisterProductForAllUsers(database: dataBase)
}
private func RegisterProductForAllUsers(database dataBase: DatabaseReference)
{
dataBase.child("Products").child(self.UniqueID()).child("Name").setValue(self.Name())
dataBase.child("Products").child(self.UniqueID()).child("UniqueID").setValue(self.UniqueID())
dataBase.child("Products").child(self.UniqueID()).child("Price").setValue(self.Price())
dataBase.child("Products").child(self.UniqueID()).child("Description").setValue(self.Description())
dataBase.child("Products").child(self.UniqueID()).child("ToBuy?").setValue(self.m_ToBuy)
dataBase.child("Products").child(self.UniqueID()).child("ToSell?").setValue(self.m_ToSell)
dataBase.child("Products").child(self.UniqueID()).child("Owner").setValue(self.m_Owner)
dataBase.child("Products").child(self.UniqueID()).child("Amount").setValue(self.m_Amount)
dataBase.child("Products").child(self.UniqueID()).child("MainImage").setValue(self.m_PicturesURLs.first)
}
private func RegisterProductForAddingUser(database dataBase: DatabaseReference)
{
dataBase.child("Users").child(m_Owner).child("Products").child(self.UniqueID()).child("Name").setValue(self.Name())
dataBase.child("Users").child(m_Owner).child("Products").child(self.UniqueID()).child("UniqueID").setValue(self.UniqueID())
dataBase.child("Users").child(m_Owner).child("Products").child(self.UniqueID()).child("Price").setValue(self.Price())
dataBase.child("Users").child(m_Owner).child("Products").child(self.UniqueID()).child("Description").setValue(self.Description())
dataBase.child("Users").child(m_Owner).child("Products").child(self.UniqueID()).child("ToBuy?").setValue(self.m_ToBuy)
dataBase.child("Users").child(m_Owner).child("Products").child(self.UniqueID()).child("ToSell?").setValue(self.m_ToSell)
dataBase.child("Users").child(m_Owner).child("Products").child(self.UniqueID()).child("Amount").setValue(self.m_Amount)
dataBase.child("Users").child(m_Owner).child("Products").child(self.UniqueID()).child("MainImage").setValue(self.m_PicturesURLs.first)
}
我需要将函数“RegisterProductOnDatabase”作为一个事务运行 - 这意味着所有写入的值都要写为一个事务。
1)如何使用Swift将所有这些数据写为ONE事务? 2)有没有更好的方法来编写所有这些值而无需代码乘法?
答案 0 :(得分:1)
首先,您应该使用词典而不是手动修改每个节点。
这来自Firebase文档:
let key = ref.child("posts").childByAutoId().key
let post = ["uid": userID,
"author": username,
"title": title,
"body": body]
let childUpdates = ["/posts/\(key)": post,
"/user-posts/\(userID)/\(key)/": post]
ref.updateChildValues(childUpdates)
详细了解如何撰写数据here。
其次,为了在多个地点进行修改,请使用this回答,因为我最近遇到了同样的问题。