Как получить данные из базы данных SQFlite, используя вложенный запрос? - PullRequest
0 голосов
/ 27 июня 2019

Я хочу получить местоположения и шлюзы, связанные с местоположением, из базы данных sqflite.

Я пытаюсь получить все местоположения сначала, а затем для каждого местоположения, которое я пытаюсь выбрать шлюзы. Я получил правильные данные. Но проблема в том, что даже при использовании async & await сначала вызывается оператор return метода, а затем все выполняемые операции.

Ниже приведен код для извлечения местоположений и шлюзов:

    Future<List<Location>> fetchAllLocationFromGroupId(int groupId) async {
    List<Location> locations = List();
    Database db = await database;
    var locationResult = await db.query(DatabaseData.LOCATION_TABLE_NAME, columns: [
      DatabaseData.LOCATION_ID,
      DatabaseData.LOCATION_NAME,
      DatabaseData.LOCATION_ALIAS,
      DatabaseData.LOCATION_SET_DEFAULT,
      DatabaseData.LOCATION_IS_ACTIVE,
      DatabaseData.LOCATION_GROUP_ID
    ]);

    locationResult.forEach((row) async {
      Location location = Location.fromMap(row);
      List<Gateway> gateways = List();
      var gatewayResult =
          await db.query(DatabaseData.GATEWAY_TABLE_NAME, columns: [
        DatabaseData.GATEWAY_ID,
        DatabaseData.GATEWAY_NAME,
        DatabaseData.GATEWAY_ALIAS,
        DatabaseData.GATEWAY_MAC,
        DatabaseData.GATEWAY_CREATED_AT,
        DatabaseData.GATEWAY_UPDATED_AT,
        DatabaseData.GATEWAY_LOCATION_ID,
        DatabaseData.GATEWAY_USER_ID
      ]);

      gatewayResult.forEach((gateway) {
        gateways.add(Gateway.fromMap(gateway));
      });

      /*gatewayResult.then((List<Map<String, dynamic>> maps) {
        for (var gateway in maps) {
          Gateway gateway1 = Gateway.fromMap(gateway);
          print(gateway1);
          gateways.add(gateway1);
        }
      });*/

      location.gateways = gateways;
      print(
          "DBHelper $groupId -> Location id -> ${location.id} and gateways-> ${location.gateways[0].gatewayAlias}");
      locations.add(location);
    });
    return locations;
  }
...