我正在Swift中创建一个与餐厅评分应用类似的应用,其中用户在不同的餐厅上发表评论。现在,我可以使用以下代码将用户的注释成功保存到数据库中。我的应用程序不需要注册或登录屏幕,用户可以根据需要直接发表评论,因此我将currentUserID设置为匿名。
@IBAction func OnSubmitTouched(_ sender: UIButton) {
if (textField.text != ""){
let ref = Database.database().reference()
let commentsReference = ref.child("comments")
let newCommentID = commentsReference.childByAutoId().key
let newCommentReference = commentsReference.child(newCommentID)
// guard let currentUser = Auth.auth().currentUser else {
// return
// }
var currentUserID = "anonymous"
if let currentUser = Auth.auth().currentUser {
currentUserID = currentUser.uid
}
// let currentUserID = currentUser.uid
newCommentReference.setValue(["uid": currentUserID, "commentText": textField.text!]) { (error, ref) in
if error != nil {
print(error!.localizedDescription)
return
}
}
现在,问题是,当向其他用户显示这些评论时,如何以一种方式分隔所有餐馆的评论,以使所有餐馆最终都不会拥有完全相同的评论部分?在仪表板中,我可以为每个餐厅的评论记录创建子记录,但是,应用程序中有1000多个餐厅,这将花费大量时间。将餐厅名称视为表视图中的单元格,用户不能添加餐厅,只能添加评论。 如果有人能帮助我,我将感到非常高兴。我知道该职位有点长,但我只是想确保所有内容都清楚。提前非常感谢您!
答案 0 :(得分:0)
好,首先要先做;如果您担心因为餐厅节点不在那里而无法在Firebase中的某个位置存储数据,请不必担心。
当您写入位置(例如comments/restaurantNameOrIDHere/comment1/
)时,如果未定义沿途的任何节点(例如comments
或restaurantNameOrIDHere
),则Firebase会为您创建该节点
顺便说一句,进入数据库结构。有两种方法可以立即使我脱身。
将餐厅名称/餐厅名称存储在评论中,并将所有评论存储在comments/
节点下。
将评论存储在餐厅名称/ id节点下,例如comments/reallyCoolRestaurant/
。
出于以下原因,我个人倾向于将两者结合起来:
根据评论所属的餐厅将其存储在存储桶中,可以轻松高效地查询餐厅的评论。
存储评论所属的餐厅可能在将来需要提取和分析餐厅评论的情况下很有用。
如果您想保持简单,只选择一个,那么我会选择第二个。