Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Firebase 使用多个条件where子句的Flatter Cloud FireStore查询_Firebase_Flutter_Google Cloud Firestore - Fatal编程技术网

Firebase 使用多个条件where子句的Flatter Cloud FireStore查询

Firebase 使用多个条件where子句的Flatter Cloud FireStore查询,firebase,flutter,google-cloud-firestore,Firebase,Flutter,Google Cloud Firestore,我一直在努力寻找正确的方法来执行一个查询,该方法基于一些可能添加或不添加的条件执行多个条件查询。我试过几种方法,但都不管用 Future<QuerySnapshot> searchStuff(StuffModel stuff) async { CollectionReference col = _firestore.collection(Constants.stuffCollection); Query query = col.where('uid', isEqu

我一直在努力寻找正确的方法来执行一个查询,该方法基于一些可能添加或不添加的条件执行多个条件查询。我试过几种方法,但都不管用

Future<QuerySnapshot> searchStuff(StuffModel stuff) async {

    CollectionReference col = _firestore.collection(Constants.stuffCollection);

    Query query = col.where('uid', isEqualTo: stuff.uid);

    if (stuff.who != null) {
      query = query.where('who', isEqualTo: stuff.who);
    }
    if (stuff.what != null) {
      query = query.where('what', isEqualTo: stuff.what);
    }
    if (stuff.where != null) {
      query = query.where('where', isEqualTo: stuff.where);
    }
    if (stuff.when != null) {
      query = query.where('when', isEqualTo: Timestamp.fromDate(stuff.when));
    }

    return await query.getDocuments();
  }
Future searchStuff(StuffModel stuff)异步{
CollectionReference col=\u firestore.collection(Constants.stuffCollection);
Query Query=col.where('uid',isEqualTo:stuff.uid);
if(stuff.who!=null){
query=query.where('who',isEqualTo:stuff.who);
}
if(stuff.what!=null){
query=query.where('what',isEqualTo:stuff.what);
}
if(stuff.where!=null){
query=query.where('where',isEqualTo:stuff.where);
}
if(stuff.when!=null){
query=query.where('when',isEqualTo:Timestamp.fromDate(stuff.when));
}
return wait query.getDocuments();
}

添加附加求值后,对于非空值,在每个条件下,代码现在看起来如下所示,并且工作正常:

Future<QuerySnapshot> searchStuff(StuffModel stuff) async {

    CollectionReference col = _firestore.collection(Constants.stuffCollection);

    Query query = col.where('uid', isEqualTo: stuff.uid);

    if (stuff.who != null && stuff.who.isNotEmpty) {
      query = query.where('who', isEqualTo: stuff.who);
    }
    if (stuff.what != null && stuff.what.isNotEmpty) {
      query = query.where('what', isEqualTo: stuff.what);
    }
    if (stuff.where != null && stuff.where.isNotEmpty) {
      query = query.where('where', isEqualTo: stuff.where);
    }
    if (stuff.when != null) {
      query = query.where('when', isEqualTo: Timestamp.fromDate(stuff.when));
    }
    return await query.getDocuments();
}
Future searchStuff(StuffModel stuff)异步{
CollectionReference col=\u firestore.collection(Constants.stuffCollection);
Query Query=col.where('uid',isEqualTo:stuff.uid);
if(stuff.who!=null&&stuff.who.isNotEmpty){
query=query.where('who',isEqualTo:stuff.who);
}
if(stuff.what!=null&&stuff.what.isNotEmpty){
query=query.where('what',isEqualTo:stuff.what);
}
if(stuff.where!=null&&stuff.where.isNotEmpty){
query=query.where('where',isEqualTo:stuff.where);
}
if(stuff.when!=null){
query=query.where('when',isEqualTo:Timestamp.fromDate(stuff.when));
}
return wait query.getDocuments();
}

添加附加求值后,对于非空值,在每个条件下,代码现在看起来如下所示,并且工作正常:

Future<QuerySnapshot> searchStuff(StuffModel stuff) async {

    CollectionReference col = _firestore.collection(Constants.stuffCollection);

    Query query = col.where('uid', isEqualTo: stuff.uid);

    if (stuff.who != null && stuff.who.isNotEmpty) {
      query = query.where('who', isEqualTo: stuff.who);
    }
    if (stuff.what != null && stuff.what.isNotEmpty) {
      query = query.where('what', isEqualTo: stuff.what);
    }
    if (stuff.where != null && stuff.where.isNotEmpty) {
      query = query.where('where', isEqualTo: stuff.where);
    }
    if (stuff.when != null) {
      query = query.where('when', isEqualTo: Timestamp.fromDate(stuff.when));
    }
    return await query.getDocuments();
}
Future searchStuff(StuffModel stuff)异步{
CollectionReference col=\u firestore.collection(Constants.stuffCollection);
Query Query=col.where('uid',isEqualTo:stuff.uid);
if(stuff.who!=null&&stuff.who.isNotEmpty){
query=query.where('who',isEqualTo:stuff.who);
}
if(stuff.what!=null&&stuff.what.isNotEmpty){
query=query.where('what',isEqualTo:stuff.what);
}
if(stuff.where!=null&&stuff.where.isNotEmpty){
query=query.where('where',isEqualTo:stuff.where);
}
if(stuff.when!=null){
query=query.where('when',isEqualTo:Timestamp.fromDate(stuff.when));
}
return wait query.getDocuments();
}

乍一看,我觉得这很好。什么是无效的?它没有返回任何内容,我设置了一些断点,满足了条件,在数据库中我有满足这些条件的文档,但什么都没有。如果我这样做,它会工作
return\u firestore.collection(Constants.stuffCollection)。where('uid',isEqualTo:stuff.uid)。where('uid',isEqualTo:stuff.uid)。where('what',isEqualTo:stuff.what).getDocuments();
我觉得代码很好。你确定工作版本和非工作版本的条件相同吗?@FrankvanPuffelen我已经解决了这个问题,我添加了一个非空值的附加条件,当我测试时,在第一次运行时它起作用,然后在第二次测试中更改参数,我注意到一个p参数带有空值,例如what==“”,所以我在每个条件上都添加了,例如stuff.what.isNotEmpty,并且该条件修复了问题。谢谢!!乍一看,这看起来很好。什么不起作用?它没有返回任何东西,我放置了一些断点,条件得到满足,在数据库中我有满足该条件的文档,但什么都没有。如果我做了什么在这样的情况下,它工作
return\u firestore.collection(Constants.stuffCollection).where('uid',isEqualTo:stuff.uid).where('what',isEqualTo:stuff.what).getDocuments();
我觉得代码很好。你确定工作版本和非工作版本的条件相同吗?@FrankvanPuffelen我已经解决了这个问题,我添加了一个非空值的附加条件,当我测试时,在第一次运行时它起作用,然后在第二次测试中更改参数,我注意到一个pparameter带有空值,例如what==“”,因此我在每个条件上都添加了,例如stuff.what.isNotEmpty,并且该条件修复了问题。谢谢!!