поиск заказов пользователей и сортировка по дате (сначала новые) с помощью firebase - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть таблица заказов в FireBase, как это enter image description here

, и в моем приложении для iOS я хочу показать заказы для пользователя, который активен и хочетотсортировать их по (CreateDate), чтобы сначала показать самые новые

я использую этот код, он показывает только пользовательские заказы без сортировки по дате

 if   (Auth.auth().currentUser != nil) {
        let user = Auth.auth().currentUser
        if let user = user {
            uid = user.uid

            print("uid = \(uid)")


            // get order details
            let ordersRef = rootRef.child("orders")
            ordersRef.queryOrdered(byChild: "clientuid_status").queryEqual(toValue: "\(uid)_0").observe(.childAdded, with: { (snapshot) -> Void in

                let snabshotvalue = snapshot.value as? [String : AnyObject]
                let dateorder = snabshotvalue!["orderDate"]
                let tecname = snabshotvalue!["tecname"]
                let theproblem = snabshotvalue!["theproblem"]
                let homeadress = snabshotvalue!["homeadress"]
                let clintlat = snabshotvalue!["clintlat"]
                let clintlong = snabshotvalue!["clintlong"]
                let clintuid = snabshotvalue!["clintuid"]
                let tecuid =  snabshotvalue!["tecuid"]
                let tecToken  = snabshotvalue!["tecToken"]
                let status = snabshotvalue!["status"]
                let servicetable = snabshotvalue!["servicetable"]

                let snashotkey = snapshot.key as String
                print("firstname: \(tecname) ")

                self.dateArray.append(dateorder as? String)
                self.tecnameArray.append(tecname as? String)
                self.problemArray.append(theproblem as? String)
                self.homeadressArray.append(homeadress as? String)
                self.clintlatArray.append(clintlat as? String)
                self.clintlongArray.append(clintlong as? String)
                self.tecuidArray.append(tecuid as? String)
                self.tecTokenArray.append(tecToken as? String)
                self.orderuidArray.append(snashotkey )
                self.clintidArray.append(clintuid as? String)
                self.statusArray.append(status as? String)
                self.servicetableArray.append(servicetable as? String)

                self.getTechRatin(teckUid: tecuid as! String)

                self.tableView.reloadData()
            })


            }

я отправил билет вПоддержка Firebase, они сказали мне использовать этот код:

    let orderOrdersByCreatedDate= (ref.child("orders").child(getUid())).queryOrdered(byChild: "createDate").queryLimited(toLast: 1)

, когда я пытаюсь использовать ваш код, я получаю эту ошибку: Использование неразрешенного идентификатора 'getUid'

я незнать, как использовать getUid ()

1 Ответ

0 голосов
/ 22 ноября 2018

Последний фрагмент кода неверен.Чтобы отсортировать заказы по creadeDate, вам необходимо:

ordersRef.queryOrdered(byChild: "creadeDate").observe(.childAdded, ...

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

Во многих случаях можно объединить значения, по которым вы хотите фильтровать, в одно (синтетическое) свойство.Похоже, вы уже сделали это с clientuid_status, и чтобы разрешить как фильтрацию по этому, так и упорядочение по дате, вы расширите его до clientuid_status_creadeDate и упорядочите / отфильтруйте по этому.

Например,этот и другие подходы, смотрите мой ответ здесь: http://stackoverflow.com/questions/26700924/query-based-on-multiple-where-clauses-in-firebase

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