我正在使用firebase数据库来存储我的iOS应用程序的数据。
这是我的firebase数据库高级结构:
在此数据库中,我将在菜单选项卡中保存菜单项的数据。这是所有菜单的列表。这是列表菜单,其中所有菜单项都有唯一键:
还有一个节点“用户”,它有一个孩子“消费者”
我在“消费者”节点的不同子节点中保存'喜欢'和'不喜欢'菜单项。
我正在制作一个屏幕,我必须显示用户喜欢的menuItems的所有细节。如您所见,我只在“Like_Deal_Dish”节点中保存menuItem键。
这是我的代码,我通过该代码获取在“Like_Deal_Deish”子项中添加的所有键:
void main() => runApp(new MyApp());
class MyApp extends StatefulWidget {
@override
MyAppState createState() {
return new MyAppState();
}
}
class MyAppStateextends State<MyApp> {
ProjectService _projectService;
@override
void initState() {
super.initState();
_projectService = new ProjectService();
}
@override
Widget build(BuildContext context) {
return new MaterialApp(
title: "My App",
theme: new ThemeData.light(),
routes: <String, WidgetBuilder> {
'/projects/add': (BuildContext context) => new HomeScreen(_projectService),
'/': (BuildContext context) => new HomeScreen(_projectService)
}
);
}
}
控制台日志我获取所有喜欢的列表,menuItem:
查询应该只提取那些在“Like_Deal_Dish”中添加了键的menuItem?
答案 0 :(得分:1)
您从Like交易中获取了菜单ID。所以现在您可以使用该值再次查询menus
孩子
这是示例(未在xcode上测试,请原谅我语法错误,如果有的话)
Database.database().reference().child("Users").child("Consumer")
.child((Auth.auth().currentUser?.uid)!).child("Like_Deals_Dish")
.observeSingleEvent(of: .value) { datasnapshot in
if datasnapshot.exists() {
print("Like Deals - \(datasnapshot)")
// Loop here for menu items
for rest in datasnapshot.children.allObjects as [FIRDataSnapshot] {
// Fetch Menu Info here with rest.value
Database.database().reference()
.child("menus").child(rest.value)
.observeSingleEvent(of: .value) { menu in
if datasnapshot.exists() {
print("MENU - \(menu)")
}
}
}
} else {
print("Liked data is not available")
}
}
希望它有用
答案 1 :(得分:0)
您可以在不使用Prashant建议的多个查询的情况下执行此操作。如果您有一个大型数据集,使用查询获取每个密钥将会非常缓慢。您可以像这样得到每个键:
Database.database().reference().child("Users").child("Consumer").child((Auth.auth().currentUser?.uid)!).child("Like_Deals_Dish").observeSingleEvent(of: .value) { datasnapshot in
if datasnapshot.exists() {
var keyArray = [String]()
for snap in datasnapshot.children.allObjects {
if let snap = snap as? DataSnapshot {
let key = snap.key
keyArray.append(key)
}
}
//use keyArray
}
else{
print("Liked data is not available")
}
}