2017-01-06 7 views
0

Firebaseからデータを読み取るコードには条件付きが必要です。私はSQLのような "WHERE project = 'test'"のような条件付きが必要です。私はそれをSwiftに書きます。Firebaseから条件付きでデータを読み取る

私はFirebaseからの読み出しデータのため、このコードがあります。

var ref:FIRDatabaseReference? 
var databaseHandle:FIRDatabaseHandle? 
var tasks = [Task]() 
var uid = (FIRAuth.auth()?.currentUser?.uid)! as String 

override func viewDidLoad() { 
    super.viewDidLoad() 

    ref = FIRDatabase.database().reference().child("\(uid)/Tasks") 

    startObservetingDB() 
} 

func startObservetingDB() { 
    ref?.observe(.value, with: { (snapshot:FIRDataSnapshot) in 
     var newSweets = [Task]() 

     for sweet in snapshot.children { 
      let sweetObject = Task(snapshot: sweet as! FIRDataSnapshot) 
      newSweets.append(sweetObject) 
     } 

     self.tasks = newSweets 
     self.tableView.reloadData() 

    }) { (error:Error) -> Void in 
     print(error.localizedDescription) 
    } 
} 

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCell(withIdentifier: "TasksCell", for: indexPath) as! TasksCell 

    let arrayTasks = tasks[indexPath.row] 

    cell.taskName.text = arrayTasks.content 

    return cell 
} 

をそして私はこのFirebaseの構造を有する:

My Firebase structure

誰も私を助けてくださいことはできますか?

答えて

0

あなたはして特定のプロジェクトのための作業を取得することができます。

ref?.queryOrdered(byChild: "project").queryEqual(toValue: "test").observe(.childAdded 

しかし、あなたはまた、あなたのデータ構造は、あなたの使用のために最適である場合を検討する必要があります。ほとんどの場合(たぶんいつも?)、特定のプロジェクトのタスクが表示されるようです。そのケースでは、その構造にデータを格納するために、より効率的である:ところで

ProjectTasks 
    $ProjectId (e.g. "test") 
     $TaskId ("asd asd se") 

:この答えは非常に関連すると思われる:どのように、query & where in Firebase (swift 3)

+0

は答えをどうもありがとう、私は構造を変更した場合"$ ProjectId(" test "など)を編集できますか?私は "updateChildValues"を使用する必要があることを知っていますが、私はそれをどのように使用するか分かりません。 – user7355869

+0

プロジェクトIDは、自動生成された無意味なキーである必要があります。決して編集する必要はありません。プロジェクトの名前はメタデータで、プロパティの値にする必要があります。例えば。 '/ Projects/$ ProjectId:{名前:"テスト "}' –

関連する問題