Firebase BarcodeScanner получает родительские / другие узлы указанного c дочернего элемента - PullRequest
1 голос
/ 01 февраля 2020

В моем приложении у меня есть определенные элементы в базе данных Firebase, например:

Categories
   Category1
      Item1
         id: item1
         name: Item 1 name
         barcode: 473088034839
      item2
         id: item2
         name: Item 2 name
         barcode: 564084724885

Эти элементы находятся в виде коллекции. У меня есть другое представление, где я использую сканер штрих-кода для сканирования штрих-кода продуктов в моей базе данных. Сканер штрих-кода отлично работает, и я могу распечатать штрих-код отсканированных продуктов на консоль, и он соответствует кодам в "штрих-код" в моей базе данных.

Проблема в том, что я пытаюсь получить имя, если предмет я сканирую. С помощью следующего кода я могу найти / сопоставить сканируемый штрих-код с кодом в моей базе данных:

let someBarcode = Database.database().reference().child("Categories").queryOrdered(byChild: "barcode").queryEqual(toValue: code)
print(someBarcode)

code - это строка цифр, которую я получаю при сканировании штрих-кода. Как найти правильный штрих-код в моей базе данных, как я могу получить текущий идентификатор и / или имя элемента?

Ответы [ 2 ]

1 голос
/ 01 февраля 2020

Запросы к базе данных Firebase Realtime работают в едином списке Они могут упорядочить / отфильтровать свойство по фиксированному пути под каждым прямым дочерним элементом в расположении, к которому вы запрашиваете.

Таким образом, в вашем сценарии вы можете выполнять запросы по всем категориям фиксированного свойства каждой категории или вы можете запросить указанную категорию c для элементов с указанным значением свойства c. Но вы не можете искать во всех категориях те, которые содержат элемент с определенным значением свойства.

Решение состоит в том, чтобы создать структуру данных, которая позволяет заданный запрос c, обычно либо путем выравнивания список, который у вас уже есть, или добавив дополнительную структуру для поиска *

Запрос Firebase, если child of child содержит значение
0 голосов
/ 10 февраля 2020

С помощью Franks мне удалось создать новый узел в моей базе данных Firebase с кодами штрих-кодов:

Barcodes
item1 : code1
item2 : code2
item3 : code3

Затем я использовал следующую функцию для

func scanner(_ controller: BarcodeScannerViewController, didCaptureCode code: String, type: String) {

   // get product id from Barcodes
    Database.database().reference().child("barcodes")
    .observeSingleEvent(of: .value) { (snapshot) in
        guard let dict = snapshot.value as? [String: Any] else {
            self.showNotFoundMessage()
            return
        }
        for (key, value) in dict {
            let valueString = "\(value)"
            if valueString == code {
                self.getProduct(id: key)
                return
            }
        }

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