如何显示每个存储位置的最新库存?

时间:2015-12-25 16:41:21

标签: angularjs ionic firebase angularfire

我正在为我的产品制作搜索功能。当用户搜索产品时,他们必须在最后一个库存注册日期的一个或多个存储位置找到它。

对于每个存储地点,将存储一个或多个存储有不同产品的库存。

到目前为止,我已经这样了,我的代码工作正常。它显示了最新的库存。但是,如果我为同一个存储位置创建了多个库存,我只希望显示每个存储位置的最新日期。

以下是截至目前的截图:

enter image description here

我只想显示 24/12/2015存储1 22/12/2015存储测试。因为我不需要显示较旧的存储库存。

以下是我的代码。

controllers.js:

.controller('InventoryCtrl', function($scope, $firebaseObject, $filter, Category, Inventory) {

$scope.categories = Category;

$scope.searchInventory = function(category){
var word = category.Category;

var ref = new Firebase('https://vivid-heat-2430.firebaseio.com/');

var invenRef = ref.child('Inventories');

var arrInv = [];

invenRef.orderByChild("Date").on("child_added", function(snapshot){
  var data = snapshot.val();
  var store = data.Inventory;
  var prod = data.Products;

  var test = Object.keys(prod);

  for( var i = 0; i < test.length; i++){
    if (test[i] == word) {
      console.log("Storage place: " + data.Inventory + " Datum inventaris: " + data.Date);

     var convertDate = $filter('date')(data.Date, 'dd-MM-yyyy');
     arrInv.push(convertDate + " " + data.Inventory);
     console.log(arrInv);
    };        
  }; 
  $scope.show = arrInv;
  $scope.$digest(); 
});

 };
})

的index.html:

<ion-list>
        <ion-radio ng-repeat="category in categories" class="item-accordion" ng-model="checked.check" value="{{category.Category}}" ng-click="searchInventory(category)">
          <p>{{category.Category}}</p>
        </ion-radio>
        <br>
      </ion-list>


      <div>
        <ion-list>
            <ion-item ng-model="item" ng-repeat="item in show.slice().reverse() track by $index">
              <span ng-bind="item"> {{item}}
              </span>
            </ion-item>


        </ion-list>
      </div>         

有人可以帮助我并告诉我如何实现这一目标吗?

提前感谢您帮助我!

1 个答案:

答案 0 :(得分:0)

在SQL数据库中,这可以通过group by子句来完成。但Firebase中不存在这种情况。在NoSQL数据库中,您必须对数据建模以适合您希望使用它的方式。我建议阅读有关NoSQL数据建模的更多信息,例如this article

在这种情况下,您需要显示最近更新的库存。因此,您应该根据(最近的)更新时间戳对库存进行建模:

lastUpdatePerInventory
    Storage_1: 1451080004970
    Storage_Test: 1450993624134

此数据结构另外到您已为其他用例存储的所有数据。应用程序可以保持所有数据结构同步。因此,如果您将产品添加到库存中,您还应该更新该库存的``。

function addProductToInventory(product, inventoryName) {
    ref.child('products')
        .push(...); // whatever you do to store a product in an inventory
    ref.child("lastUpdatePerInventory")
       .child(inventoryName)
       .set(Firebase.ServerValue.TIMESTAMP);
}

高级用法:如果您担心该功能应该是交易,您可以编写它以使用Firebase的多地点update()功能:

function addProductToInventory(product, inventoryName) {
    var updates = {};
    var newId = ref.push().key(); // determine a new unique key
    updates['products/'+key] = ...// whatever store for a product in an inventory
    updates["lastUpdatePerInventory/inventoryName"] = Firebase.ServerValue.TIMESTAMP;
    ref.update(updates);
}