База данных Flutter / Firebase Realtime: как использовать equalsTo? - PullRequest
0 голосов
/ 27 апреля 2020

Моя структура БД выглядит следующим образом:

enter image description here

final databaseReference = FirebaseDatabase.instance.reference();
databaseReference
    .child('orders')
    .equalTo(myUID, key: 'uid')
    .orderByChild(orderField)
    .limitToFirst(pageSize)
.once()
.then((snapshot) {

  // form current list
  List<dynamic> curretList = [];
  snapshot.value.forEach((orderId, orderData) {
      curretList.add(orderData);
  });

Но следующий запрос возвращает нулевой результат.

Я подозреваю, что ошибка в .equalTo(Provider.of<AppData>(context, listen: false).uid, key: 'uid'). Правильно ли я использовал equalTo здесь?

1 Ответ

0 голосов
/ 27 апреля 2020

Второй аргумент equalTo, который вы пытаетесь использовать, делает нечто совершенно иное, чем то, что вам нужно здесь.

То, что вы ищете:

final databaseReference = FirebaseDatabase.instance.reference();
databaseReference
    .child('orders')
    .orderByChild('uid')
    .equalTo(myUID)
    .limitToFirst(pageSize)

Таким образом, это берет все дочерние узлы orders, сортирует их по значению их свойства uid, а затем возвращает первые pageSize узлы, которые имеют значение uid, равное myUID.

Поскольку вы можете иметь только один orderBy... вызов на запрос, это означает, что вам придется изменить порядок результатов по отметке времени в коде приложения. Также см. Запрос на основе нескольких предложений where в Firebase

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