【问题标题】:Receive data many-to-many relation Firebase接收数据多对多关系 Firebase
【发布时间】:2016-06-19 16:49:32
【问题描述】:

我对此question 有一个扩展问题。

如果玩家属于多个团队怎么办?

我有这个

json

  "Players" : {
    "-YRHd4IjrjsBXx__B" : {
      "name" : "The best forward",
      "creationDate" : "2016-02-26 15:50:39",
      "teams" : {
         "-KAByPeIz4IjrjsBXx__B" : true,
         "-KEFPuCXcqOah_GJwsMCu" : true,
         "-KEwuQxvGpYTEJ7YQ58-l" : true,
         "-KKF8vPtf8J7cfqFh2PLm" : true
      },
    },
  etc...
  }

players-service.js

getPlayers: function(teamid) {
  var Players = {};
  var teamsIndex = ref.child('teams/' + teamid + '/players/');
  var playersIndex = ref.child('players/');
  teamsIndex.on('child_added', function(snapshot) {
    var playerKey = snapshot.key;
    playersIndex.child(playerKey).on('value', function(playersnap){
      $timeout(function() {
          console.log("key", playerKey);
          players[playerKey] = playersnap.val();
      });
    });
  });
  teamIndex.on('child_removed', function(snapshot) {
    $timeout(function(snapshot) {
      delete players[snapshot.key()];
    });
  });

  return players;
}

但它返回一个对象列表。我知道我可能会在 firebase 中查询/更改数据结构并将其作为 $firebaseArray 返回,因为我更喜欢使用 angularfire。

【问题讨论】:

  • 你的意思是想让getPlayer返回一个数组而不是一个键值对象?
  • 我很困惑。我被困在 nosql 和 SQL 世界之间。我想我想知道我的解决方案是否可行。可能需要坚持这个解决方案或更多地非规范化我的数据。还没切我正试图进行更多非规范化的那一刻。又名将 teamid: true 放在播放器节点的根目录中。 "Players" : { "-YRHd4IjrjsBXx__B" : { "name" : "The best forward", "creationDate" : "2016-02-26 15:50:39", "-KAByPeIz4IjrjsBXx__B" : true, "-KEFPuCXcqOah_GJwsMCu" : true, } }

标签: firebase angularfire firebase-realtime-database


【解决方案1】:

您通常根据您想要检索它们的方式来构建数据。

根据我的理解(如果我错了,请纠正我)你想让所有球员都加入一个团队。为此,我将使用以下结构:

"Players": {
  "player1": {...},
  "player2": {...},
  "player3": {...}
},
"Teams': {
  "team1": {...},
  "team2": {...}
},
"TeamPlayers" : {
  "team1": {
    "player1": true,
    "player2": true
  },
  "team2": {
    "player1": true,
    "player3": true
  }
}

或者使用数组

"TeamPlayers" : {
  "team1": [
    0: "player1",
    1: "player2"
  ]
}

【讨论】:

  • 我爱你!我是认真的!
  • 啊哈乐于助人!感谢您的支持。我已经用另一个解决方案进行了编辑
  • 这句话让我明白了:“您通常根据您想要检索它们的方式来构建数据。”
  • 如何显示所有 player1 的球队列表。我需要做很多查询吗?
  • 在这种情况下,我会使用ref("TeamPlayers").orderByChild("player1").startAt(true) 之类的东西。我不确定这是正确的代码,但它是正确的方法
猜你喜欢
  • 1970-01-01
  • 2018-03-19
  • 2017-05-22
  • 1970-01-01
  • 2018-08-02
  • 1970-01-01
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多