Laravel开发中如何查询Firestore中指定字段为NULL的文档
解决方案:Firestore筛选字段为NULL或不存在的文档
Firestore的查询逻辑和传统关系型数据库不同,你用->where('FieldName' ,'!=' , NULL)的方式无法得到想要的结果——这个查询会返回存在该字段且值不为NULL的文档,和你的需求完全相反。下面分场景给出对应解决方法:
场景1:筛选字段不存在的文档
Laravel的Firestore扩展(如kreait/laravel-firebase)提供了专门的方法来查询不存在的字段,直接使用whereDoesntExist即可:
$results = $query->whereDoesntExist('FieldName')->get();
场景2:筛选字段存在但值为NULL的文档
如果是字段存在但值明确为NULL的情况,用等于NULL的查询:
$results = $query->where('FieldName', '=', null)->get();
注意事项
Firestore中「字段不存在」和「字段值为NULL」是两种不同的状态,无法通过单个查询同时匹配这两种情况。如果需要同时获取这两类文档,你需要分别执行上述两个查询,再合并结果集:
$missingFieldDocs = $query->whereDoesntExist('FieldName')->get(); $nullValueDocs = $query->where('FieldName', '=', null)->get(); $combinedResults = $missingFieldDocs->merge($nullValueDocs);
另外,你原来代码中的->collection()方法是用来获取集合实例,不是执行查询获取结果,应该替换为->get()来获取查询到的文档。
内容的提问来源于stack exchange,提问作者autumn
相关产品推荐
相关产品推荐

