Firebase извлекает дочерние данные двумя разными способами - PullRequest
0 голосов
/ 13 мая 2018

Я создаю конкретную базу данных (рисунок ниже) и хочу отобразить результаты в метках. Первая метка должна показывать количество всех клиентов - это просто, но вторая метка должна показывать количество всех дочерних клиентов, например: если у клиента Бена один ребенок, а у Тома один дочерний - метка показывает 2 (число клиентов ребенка).

enter image description here

Возможно ли это сделать?

Мой код:

let userID = Auth.auth().currentUser!.uid 
ref.observeSingleEvent(of: .value, with: { snapshot in 
  if let allServices = snapshot.childSnapshot(forPath: "usersDatabase/(userID)/Customers").value { 
    if snapshot.childrenCount == 0 { 
      self.servicesLabel.text = "0" 
    } else { 
      self.servicesLabel.text = (allServices as AnyObject).count.description 
    } 
  } 

1 Ответ

0 голосов
/ 14 мая 2018

Ключевым моментом здесь является то, что, поскольку узел usersDatabase читается с помощью .value, итерация по каждому дочернему узлу и обработка его как моментального снимка даст вам счет.

let usersDatabaseRef = Database.database().reference().child("usersDatabase")
usersDatabaseRef.observe(.value, with: { snapshot in
    print("there are \(snapshot.childrenCount) users")
    var totalCustomerCount = 0
    for child in snapshot.children {
        let childSnap = child as! DataSnapshot
        let childrenRef = childSnap.childSnapshot(forPath: "Customers")
        totalCustomerCount += Int(childrenRef.childrenCount)
        print("user \(childSnap.key) has \(childrenRef.childrenCount) customers")
    }
    print("... and there are \(totalCustomerCount) total customers")
})

при условии, что в узле usersDatabase есть три пользователя, будет напечатано следующее

there are 3 users
user uid_0 has 2 customers //this is the 7U node
user uid_1 has 1 customers
user uid_2 has 3 customers
... and there are 6 total customers

Редактировать: добавлен код для подсчета и отображения общего количества клиентов по всем дочерним узлам.

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