我在 firebase 中有 2 个集合
CategoriesCollection: [
{'Id':'1',Title:'Electronics',ParentId':''},
{'Id':'2','Title':'Clothe',ParentId':''},
{'Id':'3,'Title':'Mobile',ParentId':'1'},
{'Id':'4','Title':'Laptop',ParentId':'1'},
{'Id':'5','Title':'Shirts',ParentId':'2'},
{'Id':'6','Title':'Jeans',ParentId':'2'},
]
在上面的数据中,如果 ParentId 为 '' 则表示其 ParentCategory,如果它不为空,则表示其子类别..就像移动设备是 1(电子产品)的子类别
另一个集合是
ProductsCollection :[
{'id':'1', 'title':'S23 Ultra','CategoryId':'3'},
{'id':'2', 'title':'S24 Ultra','CategoryId':'3'},
{'id':'3', 'title':'Macbook Air','CategoryId':'4'},
{'id':'4', 'title':'Spykar shirt','CategoryId':'5'},
我在屏幕上用了4个按钮来展示其产品
手机笔记本电脑牛仔裤衬衫
我使用此代码来获取相关产品
Future<List<ProductModel>> categoryProducts(String categoryId) async {
try {
print(categoryId.toString());
final list=await FirebaseFirestore.instance.collection('Products').where('CategoryId',isEqualTo: categoryId).get();
return list.docs.map((e) => ProductModel.fromSnapshot(e)).toList();
} catch (e) {
throw e;
}
}
但现在我只需选择两个父类别并想展示其所有产品
电子服装 如果我点击电子产品,它应该获取所有电子产品(移动笔记本电脑)
如何在 firebase 中编写集合代码
我很难准确理解你在说什么。但是,当用户选择“电子产品”或“服装”两个类别之一时,您希望显示与该类别相关的所有产品。为此,首先向
ProductsCollection
添加另一个字段,如下所示
ProductsCollection :[
{'id':'1', 'title':'S23 Ultra','CategoryId':'3','ParentId':'1'},
{'id':'2', 'title':'S24 Ultra','CategoryId':'3','ParentId':'1'},
{'id':'3', 'title':'Macbook Air','CategoryId':'4','ParentId':'1'},
{'id':'4', 'title':'Spykar shirt','CategoryId':'5','ParentId':'2'},
]
之后,创建一个新函数,将其命名为
getAllParentProducts
并在该函数中编写如下查询。
Future<List<ProductModel>> getAllParentProducts(String parentIdId) async {
try {
final list=await FirebaseFirestore.instance.collection('Products').where('CategoryId',isEqualTo: parentIdId).get();
return list.docs.map((e) => ProductModel.fromSnapshot(e)).toList();
} catch (e) {
throw e;
}
}
希望这对您有帮助。