2016-07-18 2 views
1

私はグループと人のかなり単純なjson構造を持っており、firebaseから各人のグループ名のリストを取得/読み込みに苦労しています。これが私が試みたものです。私は数日のデバッグに失敗しました。大いに感謝します。Firebaseの多対多リレーションクエリー

JSON:

{ 
"groups" : { 
"one" : { 
    "members" : { 
    "-KLxjv9OnQB2l5Ohr-7I" : true 
    }, 
    "name" : "group alpha" 
}, 
"two" : { 
    "members" : { 
    "-KM4oXjftRZZ5DXYt4B2" : true 
    }, 
    "name" : "group beta" 
}, 
"three" : { 
    "members" : { 
    "-KM4oXjftRZZ5DXYt4B2" : true 
    }, 
    "name" : "group gamma" 
} 
}, 
"persons" : { 
"-KLxjv9OnQB2l5Ohr-7I" : { 
    "groups" : { 
    "one" : true 
    }, 
    "personName" : "name1", 
    "personTitle" : "title1" 
}, 
"-KM4oXjftRZZ5DXYt4B2" : { 
    "groups" : { 
    "two" : true 
    }, 
    "personName" : "name2", 
    "personTitle" : "title2" 
    } 
} 
} 

APP.JS:

$scope.personsGroup = function(personObj){ 
var baseRef = new Firebase("https://un-cms-13264.firebaseio.com/"); 
var personsRef = baseRef.child('persons'); 
var groupsRef = baseRef.child('groups'); 
var res=[]; 
    for(var i=0;i<Object.keys(personObj.groups).length;i++){ 
    var groupKey=Object.keys(personObj.groups)[i] 
    res.push($firebaseArray(groupsRef.child(groupKey))); 
    }; 
    return res; 

} 

HTML:$scope変数に$firebaseArrayを添付することです

<div class="row" ng-repeat="person in persons"> 

<div class="col-lg-3"></div> 
<div class="col-lg-3">{{person.personName}}</div> 
<div class="col-lg-3"></div> 
<div class="col-lg-3 groupsList"> 
<ul><li ng-repeat="group in personsGroup(person)">{{group.name}}</li></ul> 
</div> 

</div> 
+0

あなたは1人のグループの名前を返そうとしていますか? – theblindprophet

+0

あなたの問題は何ですか?また、あなたがjsfiddle/jsbinで問題を再現できる場合、人々はそれを使って遊んで、物事がどのように働くのか(そしておそらくなぜそうでないのか)を見ることができます。あなたはそのように多くの助けを得ることがわかります。 –

+0

はい@theblindprophetそれはまさに私の問題です。私は空白のエントリを取得し、私はグループの名前を取得していない。 –

答えて

1

最善の方法:

var ref = new Firebase("https://un-cms-13264.firebaseio.com/").child("persons").child(some-person).child("groups"); 
$scope.personsGroup = $firebaseArray(ref); 

// When loaded 
$scope.personsGroup.$loaded(function(data) { 
    // can do something 
}, function(error) { 
    // error 
}); 

some-personの決定方法はあなた次第です。 personsツリーを照会して、すべての人物を保管したり、アレイまたはオブジェクト内に保管することができます。

<ul> 
    <li ng-repeat="(key, value) in personsGroup">{{ key }}</li> 
</ul> 

$firebaseArrayが非同期呼び出しであり、それは本当のびくびくすることができように私は感じるので、私はpersonGroup(person)に助言しません。

var ref = new Firebase("https://un-cms-13264.firebaseio.com/").child("persons"); 
$scope.persons = $firebaseArray(ref); 
をそして、それのいくつかの反復処理を実行します。それをスマートに、あなたはまた、あなたが望んでいた場合は1回の呼び出しで全体 personsツリーを得ることができます。

+0

これで、personエンティティからグループキー( "one"、 "two"など)を取得しましたが、どのようにgroupエンティティ(group alpha、group betaなど) ? –

+0

'ref = new Firebase(" https://un-cms-13264.firebaseio.com/ ").child(" groups ").child(グループ);' useは 'name'にアクセスできます – theblindprophet

+0

また、 'one'、' two'などの代わりに 'persons'の中で始まるグループ名を格納するだけでもいいです – theblindprophet

関連する問題