2016-09-25 14 views
6

Jak opisano here, chciałbym księgarni obiektów w oddzielnym ref i przechowywania jej wartość id wewnątrz books własności UserFirebase Swift - jak utworzyć dziecko i dodać jego identyfikator do innej właściwości ref?

Users: 
user_id:121jhg12h12 
    email: "[email protected]" 
    name: "John Doe" 
    profile_pic_path: "https://...". 
    language: "en" 
    exp_points: 1284 
    friends: [user_id] 
    books: [[book_id, status, current_page, start_date, finish_date]] 
    badges: [[badge_id, get_date]] 

Books: 
book_id: 3213jhg21 
    title: "For whom the bell tolls" 
    author: "Ernest Hemingway" 
    language: "en" 
    pages_count: 690 
    ISBN: "21hjg1" 
    year: 2007 

Ilekroć dodać książkę wewnątrz aplikacji

self.ref!.child("Books").childByAutoId().setValue(["title": arrayOfNames[0] as! NSString, "author": arrayOfNames[1] as! NSString , "pages_count":arrayOfNames[2] as! NSString]) 

Obiekt book jest tworzony w Books ref, ale chciałbym od razu dodać jego identyfikator do tablicy użytkowników User's book.

Czy można to zrobić w jakiś zręczny sposób, zamiast wypytywać książkę, pobrać jej ID i dodać do tablicy?

Jeśli nie, jaki jest właściwy sposób wysyłania zapytań do identyfikatora obiektu, który właśnie został utworzony?

Może nie powinienem używać trybu AutoID i tworzyć niepowtarzalnych identyfikatorów dla każdego obiektu samemu w aplikacji?

Odpowiedz

13

Można dostać klucz stworzony przez childByAutoId w ten sposób:

let newBookRef = self.ref! 
         .child("Books") 
         .childByAutoId() 

let newBookId = newBookRef.key 

let newBookData = [ 
    "book_id": newBookId, 
    "title": arrayOfNames[0] as! NSString, 
    "author": arrayOfNames[1] as! NSString, 
    "pages_count":arrayOfNames[2] as! NSString 
] 

newBookRef.setValue(newBookData) 
3

aby pobrać nowo utworzonego AutoID: -

let refer = self.ref!.child("Books").childByAutoId() 
    let createdId = refer.key //Your autoID 
    refer.setValue(["title": arrayOfNames[0] as! NSString, "author": arrayOfNames[1] as! NSString , "pages_count":arrayOfNames[2] as! NSString]) 

nawet lepszym sposobem byłoby zamień autoId na timeStamp dla przyszłego odniesienia, kiedy książka została dodana: -

let timestamp = Int(NSDate.timeIntervalSinceReferenceDate*1000) //Unique 
    self.ref!.child(timeStamp).setValue(["title": arrayOfNames[0] as! NSString, "author": arrayOfNames[1] as! NSString , "pages_count":arrayOfNames[2] as! NSString])