【问题标题】:How can i add the sub collection in a data model? flutter如何在数据模型中添加子集合?扑
【发布时间】:2021-12-12 03:00:24
【问题描述】:

如何获取子集合中的列表产品并将其添加到我创建的数据模型中。 我正在尝试从供应商处将所有产品添加到购物车中。 这是我的数据库的结构

这是我想要做的数据代码

class cartModel {
      vendorCartModel? vendorCart;
      List<productCartModel>? productsInCart;
    
      cartModel();
    
      cartModel.fromSnapshot(DocumentSnapshot snap){
        vendorCart = vendorCartModel.fromSnapShot(snap);
        productsInCart = ?????? (here is the part where i don't know what to do')
      }
      }
================

class vendorCartModel {
  bool selected = false;
  String? storeName;
  String? uid;
  String? userId;
  String? vendorToken;
  GeoPoint? storeLocation;

  vendorCartModel();
  vendorCartModel.fromSnapShot(DocumentSnapshot snap){
    storeName = snap["storeName"];
    uid = snap["uid"];
    userId = snap["userId"];
    vendorToken = snap["vendorToken"];
    storeLocation = snap["storeLocation"];
  }
}
==========================

class productCartModel {
  bool selected = false;
  String? name;
  List<dynamic>? imgUrl;
  String? uid;
  String? vendorUid;
  int? quantity;
  double? sellingPrice;
  double? sellerPrice;
  double? oldPrice;
  double? weight;
  bool? shipping;
  int? minOrder;
  
  productCartModel();

  productCartModel.fromSnapshot(DocumentSnapshot snap){
    uid = snap["uid"];
    vendorUid = snap["vendorUid"];
    imgUrl = snap["imgUrl"];
    name = snap["name"];
    weight = snap["weight"];
    sellingPrice = double.parse(snap["sellingPrice"].toString());
    sellerPrice = double.parse(snap["sellerPrice"].toString());
    oldPrice = double.parse(snap["oldPrice"].toString());
    quantity = snap["quantity"];
    minOrder = snap["minOrder"];
    shipping = snap["shipping"];
  }
}

================ 这是我的数据库结构

  • 购物车(收藏)
    • 字段(这将用作供应商)
      • 产品(子系列)

=============== 这是我的查询

await _fStoreIns
            .collection('cart')
            .doc(vendorId).get().then((value){
cartModel = cartModel.fromSnapshot(value);
})

提前致谢。

【问题讨论】:

    标签: flutter google-cloud-firestore datamodel


    【解决方案1】:

    首先,我们获取供应商的数据,然后是 productsData,并将两者都传递给cartModel.fromSnapShot 方法。

    使用这个查询:

    DocumentSnapshot<Map<String, dynamic>> vendorData =
        await _fStoreIns.collection('cart').doc(vendorId).get();
    QuerySnapshot<Map<String, dynamic>> productsData = await _fStoreIns
        .collection('cart')
        .doc(vendorId)
        .collection('products')
        .get();
    cartModel = cartModel.fromSnapshot(vendorData, productsData);
    

    如下定义您的cartModel.fromSnapshot:

    cartModel.fromSnapshot(DocumentSnapshot vendorData, QuerySnapshot productsData) {
      vendorCart = vendorCartModel.fromSnapShot(vendorData);
      productsInCart = productsData.docs
          .map((e) => productCartModel.fromSnapShot(e)).toList();
    }
    

    【讨论】:

    • 哇,非常感谢……它可以工作……经过一些修改,效果很好……我刚刚将 productsInCart 查询修复到这个 .. productsInCart = productsSnap.docs .map((e) => productCartModel.fromSnapShot(e)).toList();
    • 很高兴能帮上忙。我已经纠正了错误。您可以为我的答案投票,以便更容易找到。
    【解决方案2】:

    用于更新数据

    final pushData = FirebaseFirestore.instance.collection('cart');
    pushData
            .doc(cardId)
            .collection("products")
            .doc(productId)
            .set({
             changes:"Changes"
             })
    

    用于添加数据

    final pushData = FirebaseFirestore.instance.collection('cart');
    pushData
            .doc(cardId)
            .collection("products")
            .add({
              data: "DATA"
            });
    

    用于获取数据

    await pushData
            .doc(productid)
            .collection("products")
            .orderBy("timeStamp", descending: true) // if you want to order by time or whatever
            .limit(50) //for adding limit add limit
            .get();
    

    【讨论】:

      【解决方案3】:

      如果我理解正确,您在 fbCloudStore 中具有以下结构

      -vendors (collection)
       -vendor (doc)
        -products (colecction)
         -product (doc)
      

      要获取您可以执行的特定子集合:

      final vendorId = 'Replace with vendor Id';
          final _querySnapshot = await _fStoreIns
                  .collection('vendors')
                  .doc(vendorId)
                  .collection('products')
                  .get();
          
          
          for(final doc in _querySnapshot.docs){
            //do stuff here
            ProductModel.fromJson(doc.data());
          }
      

      【讨论】:

      • 我的结构是这样的 - 购物车(集合) - 字段(这将用作供应商) - 产品(子集合) 我想要得到的是这样的东西 await _fStoreIns .collection('cart ') .doc(vendorId).get().then((value){ car​​tModel = cartModel.fromSnapshot(value); }) 在我的 cartModel.fromSnapshot 里面是 cartModel.fromSnapshot(DocumentSnapshot snap){ vendorCart = vendorCartModel.fromSnapShot (折断); productCart.add(ChkOutItemModel.fromSnapshot(snap['subCollection of products'])); }
      【解决方案4】:

      我的结构是这样的

      - cart (collection)
        - fields (this will be used as vendor)
          - products ( sub collection )
      

      我想要的是这样的东西

      await _fStoreIns
                  .collection('cart')
                  .doc(vendorId).get().then((value){
      cartModel = cartModel.fromSnapshot(value);
      })
      

      我的 cartModel.fromSnapshot 在哪里

      cartModel.fromSnapshot(DocumentSnapshot snap){
          vendorCart = vendorCartModel.fromSnapShot(snap);
          productCart.add(ChkOutItemModel.fromSnapshot(snap));
        }
      

      【讨论】:

      • 这似乎是该问题的支持信息。而不是将其作为答案发布,您可以使用信息编辑原始问题
      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 2021-02-04
      • 2019-09-21
      • 1970-01-01
      • 2016-04-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多