やりたいこと
ノードa-b-cのb-1に属するcを取ってきて、ノードcから値を取ってきたい
具体的には、bー1に属するc-1, c-3を取って、ノードcからcー1, c-3の値を取ってくる

やったこと
Swift
1// ノードcから値を取ってくる 2let REF_C = Database.database().reference().child("c") 3func queryCfromABC(a: String, b: String, text: String, completion: @escaping (Class) -> Void) { 4 referenceABC(a: a, b: b) { (c) in 5 self.REF_C.child(c).queryOrdered(byChild: "name").queryStarting(atValue: text).queryEnding(atValue: text+"\u{f8ff}").observeSingleEvent(of: .value, with: { (DataSnapshot) in 6 DataSnapshot.children.forEach({ (child) in 7 let child = child as! DataSnapshot 8 if let dict = child.value as? [String: Any] { 9 let newC = Class.transformClass(dict: dict, key: child.key) 10 completion(newC) 11 } 12 }) 13 }) 14 } 15} 16// ノードabcからaとbを指定して、b-1に属するcを取ってくる 17let REF_ABC = Database.database().reference().child("a-b-c") 18func referenceABC(a: String, b: String, completion: @escaping (String) -> Void) { 19 REF_ABC.child(a).child(b).observeSingleEvent(of: .value, with: { (DataSnapshot) in 20 DataSnapshot.children.forEach({ (c) in 21 let child = c as! DataSnapshot 22 completion(child.key) 23 }) 24 }) 25}
問題点
ノードに参照してqueryOrderedはできるが、
ノードに参照して、取ってきた値を指定して、queryOrderedができない。
Swift
1// これはできる 2let REF_C = Database.database().reference().child("c") 3self.REF_C.queryOrdered(byChild: "name")
Swift
1// これができない 2let REF_C = Database.database().reference().child("c") 3self.REF_C.child(c).queryOrdered(byChild: "name")
どうすればよいでしょうか?
すみませんが、よろしくお願いいたします。
child(c)はちゃんと"c-1", "c-2", "c-3"の値を参照してますか?
ご返事ありがとうございます。
child(c)は、completion(child.key)が返ってくるので、"c-1"と"c-3"が一つずつ返ってきます。
参照したreferenceを以下のchildAddedでオブザーブするとどうなりますか?
let REF_C = Database.database().reference().child("c")
self.REF_C.child(c).queryOrdered(byChild: "name").observe(.childAdded)
ご返信ありがとうございます。
今やってみます!
self.REF_CLASSES.child(c).queryOrdered(byChild: "name").observe(.childAdded, with: { (DataSnapshot) in
print("DataSnapshot.value -> \(DataSnapshot.value!)")
DataSnapshot.value -> description
DataSnapshot.value -> name
DataSnapshot.value -> description
DataSnapshot.value -> name
queryOrdered(byChild: "name" にかかわらず、値が返ってきました
nameの値のみを読み取りたいって事ですかね?
queryOrderedは指定した子キーまたはネストされた子のパスの値によって結果を並べ替え時に使うので、descriptionの値も一緒に読み取ります。ただnameの値によって並び替えになります。
あと分かりやすくするためにkey: valueを違う値で示した方がいいと思います
例 )
name: "hoge"
description: "fuga"
ありがとうございます。
c-1とc-3の値を全部取ってきたいです。
self.REF_C.child(c).queryOrdered(byChild: "name").queryStarting(atValue: text).queryEnding(atValue: text+"\u{f8ff}").observeSingleEvent(of: .value, with: { (DataSnapshot) in
DataSnapshot.children.forEach({ (child) in
print("child -> \(child)")
上のコードで、
print("child -> \(child)")
child -> Snap (c-1) {
description = fuga;
name = hoge;
}
child -> Snap (c-3) {
description = fuga;
name = hoge;
}
となるように取ってきたいです。
REF_C.queryOrdered(byChild: "name")
だと機能するのですが、
REF_C.child(c).queryOrdered(byChild: "name")
で、child(c)を入れると機能しなくなります。
child(c)で1コ指定したら、queryOrderedは使えなくなるのでしょうか?
REF_C.child(c).queryOrdered(byChild: "name")でのprint("child -> \(child)")
はどのような値が返ってきますか?
機能しなくなるというのは何の値を取得出来ないという事ですかね?
self.REF_C.child(c).queryOrdered(byChild: "name").queryStarting(atValue: text).queryEnding(atValue: text+"\u{f8ff}").observeSingleEvent(of: .value, with: { (DataSnapshot) in
print(DataSnapshot)
をするとどうなりますか?
DataSnapshot -> Snap (c-1) <null>
DataSnapshot -> Snap (c-3) <null>
が出ます。
print("child -> \(child)")
はなにもでませんでした
回答1件
あなたの回答
tips
プレビュー