Как получить значения внутри вложенных узлов в Firebase на Swift - PullRequest
0 голосов
/ 31 января 2019

У меня есть узел под названием «Рецепты», узел «Рецепты» содержит несколько рецептов.Для каждого рецепта у него есть некоторые общие данные (предписанный врач / дата назначения / ... и т. Д.), А также несколько узлов «Медицина».Для каждого лекарства у него есть данные (название лекарства, частота / ... и т. Д.)

Моя цель - получить каждое лекарство и его общие данные (назначенный врач / дата назначения / ... и т. Д.) И сохранить их.в отдельном узле.

Вот мой дизайн базы данных в Firebase: Дизайн базы данных для узла "Рецепты"

Вот мой код и то, что я пытался сделать:

    refPrescription = Database.database().reference().child("users").child(userID!).child("Prescriptions");

    //observing the data changes
    refPrescription.observe(DataEventType.value, with: { (snapshot) in

        //if the reference have some values
        if snapshot.childrenCount > 0 {
            //clearing the list
            self.prescriptionsList.removeAll()

            //iterating through all the values
            for prescriptions in snapshot.children.allObjects as! [DataSnapshot] {
                //getting values
                let prescribtionObject = prescriptions.value as? [String: AnyObject]
                let physicionName = prescribtionObject?["Prescribed Physician"]
                let prescriptionDate = prescribtionObject?["Prescription Date"]
                let RX = prescribtionObject?["RX"]
                let prescribtionId = prescriptions.key


                //try to get medicines
                self.refRefill = Database.database().reference().child("users").child(self.userID!).child("Prescriptions").child(prescribtionId);

                //observing the data changes
                self.refRefill.observe(DataEventType.value, with: { (snapshot) in

                    //if the reference have some values
                    if snapshot.childrenCount > 0 {
                        //clearing the list
                        self.prescriptionsList.removeAll()

                        //iterating through all the values
                        for medicines in snapshot.children.allObjects as! [DataSnapshot] {
                            //getting values
                            let medicineObject = medicines.value as? [String: AnyObject]
                            let medDose = medicineObject?["Doze"]
                            let medFrequency = medicineObject?["Frequency"]
                            let medName = medicineObject?["Name"]
                            let medQuantity = medicineObject?["Quantity"]
                            let medRefill = medicineObject?["Refill"]
                            let medRefillDate = medicineObject?["nextRefillDate"]


                            self.refRefill = Database.database().reference().child("users").child(self.userID!).child("Refills")
                            let RefillID = self.refRefill.childByAutoId().key

                            let refill1 = ["Prescribed Physician": physicionName as Any, "Refill Date": medRefillDate as Any, "RX": RX as Any, "Prescription ID": prescribtionId as Any, "Dose": medDose as Any, "Frequency": medFrequency as Any, "Name": medName as Any, "Quantity": medQuantity as Any]

                            self.refRefill.child(RefillID!).setValue(refill1)
                        }
                    }
                })

            }
        }
    })

Я немного озадачен выводом, который я получил, узлы, которые я стремился получить, были прекрасно сохранены в моей базе данных.Однако я обнаружил, что 3 реплицированных узла содержат общие данные предписания, которые я получил из первого цикла (Предписанный врач / Дата назначения / ... и т. Д.). Вот моя база данных после выполнения моего кода

Итак, как я могу исправить свой код и не сохранять реплицированные узлы в моей базе данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...