如何从flutter中的集合中根据类别获取产品?

问题描述 投票:0回答:1

我在 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 中编写集合代码

flutter
1个回答
0
投票

我很难准确理解你在说什么。但是,当用户选择“电子产品”或“服装”两个类别之一时,您希望显示与该类别相关的所有产品。为此,首先向

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;
    }
  }

希望这对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.