1

I'm having trouble updating a value in my Firebase database with the key status. I just can't figure out how to access the child(id) in which it is an autoID. Should I have an attribute in my Swift 3 Entity? Or is there a child(autoID) or something similar? I'm new in Firebase and Swift 3. Can any one help? This is my code:

 self.ref?.child("requests").queryOrdered(byChild: "Sender").queryEqual(toValue: self.items[indexPath.row].Sender).setValue("2", forKey: "status")) 

click here to see an image showing my database

3 Answers 3

1

Swift 3 && Firebase 3

Hope this code will be help you...

 // create the reference you want to observe let myRequestRef = FIRDatabase.database().reference().child("requests").queryOrdered(byChild: "Sender").queryEqual(toValue: self.items[indexPath.row].Sender) // check the sender value myRequestRef.observeSingleEvent(of: .value, with: { (snapshot) in //get the sender key let senderKey = snapshot.key as String // create status ref for new status value let statusRef = FIRDatabase.database().reference().child("requests").child(senderKey) // create new dict for status value let newValue = ["Status": 2] as [String: Any] statusRef.updateChildValues(newValue, withCompletionBlock: { (error, _) in if error != nil { print(error?.localizedDescription ?? "Failed to set status value") } print("Successfully set status value") // Update your UI DispatchQueue.main.async { // Do anything with your UI } }) }) { (error) in print("Failed to get snapshot", error) } 
Sign up to request clarification or add additional context in comments.

Comments

0

Try moving your code inside .observe. This will allow you to get the status and check that it's accessing the right child. By using the child path below, it will override the status value but not the rest of the values inside the child.

self.ref?.child("requests").queryOrdered(byChild: "Sender").queryEqual(toValue: self.items[indexPath.row].Sender).observe(.value, with: { (snapshot) in let value = snapshot.value as? NSDictionary if value != nil { print(value) print(value["status"]) // If status is what you want, and prints out the correct status and // correct child item // Update the status self.ref.child("requests/\(self.items[indexPath.row].Sender)/status").setValue("2") } }) 

I haven't tested the code above, but you should be able to make minor tweaks to get it to work in your code and on your firebase database.

Comments

0

You can update status value as below:

self.ref?.child("requests").queryOrdered(byChild: "Sender").queryEqual(toValue: self.items[indexPath.row].Sender).observe(.value, with: { (snapshot) in let value = snapshot.value as? NSDictionary if value != nil { self.ref.child("requests/(self.items[indexPath.row].Sender)").updateChildValues(["status":"2"]) } }) 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.