2016-06-19 6 views
1

ab Ich komme aus einem SQL-Hintergrund und habe kürzlich mit Firebase begonnen, um einen ionischen Einkaufswagen zu erstellen. Dies ist das Datenbankschema:Firebase: So rufen Sie Daten aus zwei Tabellen mit der ID

Shopping Cart Schema

ein Warenkorb des Benutzers abzurufen, habe ich die folgenden

var user_id="user1"; // Temporary initialised 

    var refCart = new Firebase("https://testing.firebaseio.com/cart"); 
    var cart=$firebase(fireBaseData.refCart().child(user_id)).$asArray(); 

Dies gibt das Ergebnis:

item1 1 
item2 2 
item3 5 

versucht So foreach() mit

var refMenu = new Firebase("https://testing.firebaseio.com/menu"); 
refCart.child(user_id).on("value", function(snapshot) { 

    snapshot.forEach(function(childSnapshot) { 

     var item_id = childSnapshot.name(); 
     var qty = childSnapshot.val(); 

     //var data= refMenu.child(item_id).val(); 
     // val is not a function 

     //var data= refMenu.child(item_id).exportval(); 
     // exportval is not a function 

     //var data = $firebase (refMenu.child(item_id)). $asArray(); 
     // Give me an array of objects , ie attributes - OK! But what to do next ? 

     //console.log("DATA",data); 

     console.log("Item",item_id+" "+qty); 

    }); 

}); 

Wie kann ich item_id verwenden, um Artikeldetails abzurufen.

Ist es die korrekte Art, Daten aus mehreren Tabellen abzurufen?

Update:

Mit on() Funktion verwaltet i Attribute der Artikel zu erhalten.

refMenu.child(item_id).on("value", function(snapshot) { 
     console.log("Price",snapshot.val().price); 
    }); 

Aber gibt es eine bessere Implementierung für das gleiche.

Gibt es bessere Möglichkeiten zum Abrufen (von der Serverseite) bestimmte Attribute für das Element. Wie in SQL

SELECT name,price, ... from menu; 

Antwort

1

HINWEIS: .on('event', callback) Methode wird jedes Mal, wenn Ihr Rückruf nennt das Ereignis ausgelöst wird.

Wenn Sie Daten von einem Referenz einmal abrufen müssen, sollten Sie verwenden: .once('event', callback)

NOTE2: snapshot.val() gibt Ihnen ein JSON-Objekt, das Sie auf eine Variable

zuweisen würde ich tun es auf diese Weise:

refCart.child(user_id).on("value", function(snapshot) { 

    snapshot.forEach(function(childSnapshot) { 
    var item_id = childSnapshot.name(); 
    var qty = childSnapshot.val(); 

     refMenu.child(item_id).once("value", function(snapshot) { 
      var item = snapshot.val() 
      console.log(item.name +' '+ item.price) 
     }); 

}); 

}); 

Hoffe, es hilft;)

+0

Hey @Devid ich die Daten aus zwei Tabellen, dh Wagen und Menü abgerufen werden wollte. Gibt es dafür eine bessere Alternative? –

+0

Sie müssen nicht alles in 1 "Abfrage" wie in SQL tun. Es ist eine gute Lösung, Daten aus dem Warenkorb abzurufen und dann die benötigten Daten aus dem Menü abzurufen. Dies ist der Firebase-Weg, um Joins zu machen. Aus meiner Sicht ist das einzige, was Sie verbessern können, Ihre Clientseite "Elemente" zwischenzuspeichern, sodass Sie Firebase für dasselbe Element nicht mehrmals abfragen müssen. –

+0

Danke .... Aber ich wollte einen besseren Ansatz. Wie Sie sehen können, würde das Speichern von Menüelementen im Einkaufswagen zu Redundanz führen. Und bei diesem Ansatz brauche ich fast zwei Arrays. Ich würde gerne wissen, ob NoSQL für solche Anwendungen gut ist. –

Verwandte Themen