Обновите дочерние значения в Firebase, когда значение узла неизвестно / автоматически сгенерировано Swift - PullRequest
0 голосов
/ 07 марта 2019

У меня есть функция поиска в моем приложении, которая работает, возвращает значения из БД и заполняет текстовые просмотры на моем экране. Я хочу реализовать следующее: если значение для текстового представления обновляется, мы можем нажать кнопку сохранения, и значения, которые были возвращены в результате поиска, будут обновлены под тем же идентификатором БД.

Вот моя структура базы данных: enter image description here

А вот метод обновления, который я пытаюсь реализовать:

func updateRecord(){

    guard let pub: String = searchText.text?.lowercased() else { return }

    let databaseRef = Database.database().reference().child("Drinks")


    let query = databaseRef.queryOrdered(byChild: "pub").queryStarting(atValue: pub).queryEnding(atValue: "\(String(describing: pub))\\uf8ff")

    query.observeSingleEvent(of: .value) { (snapshot) in
        guard snapshot.exists() != false else {

            print("Error, doesn't exist")

            return
        }
        DispatchQueue.main.async {

            let signature = "E"


            //adding drink data
            let drink = [
                "pub": self.pubName.text!.lowercased() as String,
                "location": self.pubLocation.text!.lowercased() as String,
                "price": self.price.text!.lowercased() as String,
                "rating": self.rating.text!.lowercased() as String,
                "comment": self.comment.text!.lowercased() as String,
                "signature": signature
            ]
            databaseRef.child(--How do I access this token, for the drink in the picture I need to get "Lzsx_Vv5x5WVFsig-Zl"--).setValue(drink)

            return
        }
    }
}

По сути, в моей базе данных мне нужно иметь доступ к автоматически сгенерированному идентификатору, под которым хранятся данные. Я знаю, что метод «updateChildValues» может работать или «setValue» снова, так как я снова сохраняю информацию, но как я могу получить доступ к идентификатору, в котором хранятся данные?

Спасибо, E

1 Ответ

1 голос
/ 07 марта 2019

Я не уверен на 100%, так как я не использовал Firebase в течение одного года. Но попробуйте следующее.

query.observeSingleEvent(of: .value) { (snapshot) in
    if snapshot.childrenCount > 0 {
        for drink in snapshot.children.allObjects as! [DataSnapshot] {
            let id = drink.key; print(id)
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...