2016-07-26 7 views
8

Ten kod działa poprawnie!Metody zapytań firebase startAt() zwracające uwagę na wielkość liter

Jedyna poprawa chcę jest - kiedy mijam „Pi”, to sprowadzić wszystkie elementy obiektów, które zaczynają się nazwą „Pi”, ale gdy wchodzę „PI” zwraca nic!

Oznacza to, że chcę tę metodę .startAt (itemName), aby nie było w niej rozróżniane wielkie i małe litery. Tak że powinien współpracuje z niczego (małe i duże), w tym przypadku „Pi” i „pi” etc ..

//5. Get menu items from RestaurantMenu 
 
this.getMenuItemFromRestaurantMenu = function(callback, itemName) { 
 
    var ref_restMenu = firebase.database().ref() 
 
    .child('Restaurants') 
 
    .child('Company') 
 
    .child('menu'); 
 

 
    //Check if item is already exist! 
 
    ref_restMenu.orderByChild("itemName").startAt(itemName).once("value", function(snapshot) { 
 
    var data = snapshot.val(); 
 
    if(data !== null) { 
 
     //We will ger item name and restaurant id from this data. 
 
     callback(data); 
 
    } else { 
 
     //Item not found in globalMenu 
 
     console.log("%c Item not found in Global Menu", "color: red"); 
 
    } 
 
    }); 
 
}

Odpowiedz

10

Nie ma jeszcze wsparcia dla małych wyszukiwań w Firebase. Najlepszym sposobem na obsłużenie tego byłoby przechowywanie małych liter wzdłuż oryginalnego łańcucha, a następnie zapytanie do łańcucha znaków małej litery.

var ref_restMenu = firebase.database().ref() 
    .child('Restaurants') 
    .child('Company') 
    .child('menu'); 
var item = "Apple Pie"; 
// Or however you store data 
ref.push({ 
    itemName: item, 
    itemNameLower: item.toLowerCase(), 
    ... 
}) 

Następnie można zapytać, jak tak:

//Check if item is already exist! 
// query itemNameLoweruse and .toLowerCase() 
ref_restMenu.orderByChild("itemNameLower").startAt(itemName.toLowerCase()).once("value", function(snapshot) { 
    var data = snapshot.val(); 
    if(data !== null) { 
     //We will ger item name and restaurant id from this data. 
     callback(data); 
    } else { 
     //Item not found in globalMenu 
     console.log("%c Item not found in Global Menu", "color: red"); 
    } 
}); 

To wymaga replikacji danych, ale jak na razie nie jest łatwiejszy do przewidzenia opcja.

Numer referencyjny: Firebase Google Forum

+0

Dzięki, pomogło mi to! –

+0

Problem polega na tym, że podczas wybierania chcesz pokazać sposób, w jaki został zarejestrowany przez użytkownika. – EduardoMaia

+2

Następnie wyświetl wersję bez małych liter. Wyszukujesz tylko małe litery, co nie oznacza, że ​​musisz je przedstawić. – theblindprophet