Выбрать всех детей из базы данных - PullRequest
0 голосов
/ 17 мая 2018

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

enter image description here

Когда ранее под Customers у меня был только один ребенок, тогда я знал, как показывать клиентам, когда путь был usersDatabase/userID/Customers. Но в этот момент мой путь составляет usersDatabase/userID/Customers/userSpecificName, и мое табличное представление показывает пустую ячейку. Что я должен добавить в своем коде для правильной работы кода?

Это код, когда я импортирую данные из базы данных:

let userID = Auth.auth().currentUser!.uid
    ref = Database.database().reference().child("usersDatabase").child(userID).child("Customers")

    ref.observe(DataEventType.value, with: { (snapshot) in
        if snapshot.childrenCount > 0 {
            self.services.removeAll()
            self.filteredServices.removeAll()
            for results in snapshot.children.allObjects as! [DataSnapshot] {
                let results = results.value as? [String: AnyObject]
                let name = results?["Name and surname"]
                let phone = results?["Phone"]
                let customerID = results?["ID"]

                let myCustomer = CustomerModel(name: name as? String, phone: phone as? String, customerID: customerID as? String)
                self.services.append(myCustomer)
                self.filteredServices.append(myCustomer)
            }
            self.tableView.reloadData()
        }
    })

Что я должен добавить в строку ref = Database.database (). Reference (). Child ("usersDatabase"). Child (userID) .child ("Customers") в этом табличном представлении показан дочерний элемент добавлены клиенты (Бен Смит и Том Круз)?

1 Ответ

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

Этот ответ аналогичен предыдущему ответу здесь

Что вы хотите сделать, это обработать каждого ребенка в Customer как DataSnapshot, тогда к детям можно получить доступ.

Учитывая структуру Firebase:

usersDatabase
  uid_0
     Customers
        Ben Smith
           data: "Some data"
        Tom Cruise
           data: "Some data"
  uid_1
     Customers
        Leroy Jenkins
           data: "Some data"
  uid_2
     Customers
        De Kelly
           data: "Some data"
     etc

Код для распечатки каждого пользователя и его клиентов:

let usersDatabaseRef = Database.database().reference().child("usersDatabase")
usersDatabaseRef.observe(.value, with: { snapshot in
    print("there are \(snapshot.childrenCount) users")
    for child in snapshot.children {
        let childSnap = child as! DataSnapshot
        print("user: \(childSnap.key)")
        let userCustomerSnap = childSnap.childSnapshot(forPath: "Customers")
        for customer in userCustomerSnap.children {
            let customerSnap = customer as! DataSnapshot
            print(" customer: \(customerSnap.key)")
        }
    }
})

и вывод

there are 3 users
user: uid_0
 customer: Ben Smith
 customer: Tom Cruise
user: uid_1
 customer: Leroy Jenkins
user: uid_2
 customer: De Kelly
 customer: Leonard Nimoy
 customer: William Shatner

Редактировать : ОП хотел знать, как получить доступ к узлу data под каждым клиентом, так что вот немного измененная версия с выводом

let usersDatabaseRef = Database.database().reference().child("usersDatabase")
usersDatabaseRef.observe(.value, with: { snapshot in
    print("there are \(snapshot.childrenCount) users")
    for child in snapshot.children {
        let childSnap = child as! DataSnapshot
        print("user: \(childSnap.key)")
        let userCustomerSnap = childSnap.childSnapshot(forPath: "Customers")
        for customer in userCustomerSnap.children {
            let customerSnap = customer as! DataSnapshot
            let dict = customerSnap.value as! [String: Any]
            let value = dict["data"] as! String

            print(" customer: \(customerSnap.key)")
            print("    and their data is: \(value)")
        }
    }
})

и выводом

there are 3 users
user: uid_0
 customer: Ben Smith
    and their data is: some data
 customer: Tom Cruise
    and their data is: some data
user: uid_1
 customer: Leroy Jenkins
    and their data is: some data
user: uid_2
 customer: De Kelly
    and their data is: some data
 customer: Leonard Nimoy
    and their data is: some data
 customer: William Shatner
    and their data is: some data
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...