kobasaです(´ω`*)
FirebaseのFirestore Databeseというデータベースの機能を勉強していました。
他にもRealtime Databaseというデータベースもあるそうですが(古い?)
今回は新しい方のFirestoreで簡単な内容を進めます。
140日目の勉強内容
Firestore Databeseの仕組み
色々なデータがキーバリュー型でドキュメントという箱に入っている。
さらにドキュメントはコレクションというドキュメントを統括するものに入っている。
コレクションの中にはいくつものドキュメントが入り、
ドキュメントには複数のデータがキーバリュー型で入っている。
フォルダの階層分けのような感じ。
データベースの作り方
Firestore Databeseを選択し、データタブを選択。
「+コレクションを開始」で新しいコレクションを作成する。
コレクション名を決める。ドキュメントidは自動で選択して作成。
その中にデータをキーバリューの形で保存。フィールドにキー名を入れ、値にバリューを入れる。
ある投稿に紐づくコメントやいいね!なども少しややこしいが設定できる。
あるドキュメントに対してまたコレクションを設定していく感じ。
データベースにデータを保存する
Firebaseを使用するにはimportが必要。
import Firebase
import FirebaseFirestore
データをデータベースに保存する処理。
@IBAction func send(_sender: Any) {
db2.collection("Answers").document().setData(
["answer": textView.text as Any, "userName":userName as Any,"postDate":Date().timeIntervalSince1970])
}
コレクション名Answersの中のドキュメントにキーバリュー型でデータを保存する処理。
“answer”にテキスト、”userName”にユーザー名、”postDate”に現在の時間を保存している。
Firestoreでコレクションやドキュメント作っていなくても、この記述で自動的に作ってくれる。
データベースからデータを取得する処理。
//DBの場所を指定。Firestoreにアクセスしコレクション名とドキュメント名を取得
let db1 = Firestore.firestore().collection("Odai").document("xD9x6sSEIlfANN3pnGeK")
//回答内容をデータベースに送信するときに使用する。
let db2= Firestore.firestore()
//FIrestoreからお題を読み込んでラベルに表示させるメソッド
func loadQuestionData(){
//値が入ってきたらsnapShotに入ってくる
db1.getDocument{ (snapShot, error) in
if error != nil{
return
}
let data = snapShot?.data()
//キー"odaiText"のバリューを取得する記述(ディクショナリ型の取得方法)
self.odaiLabel.text= data!["odaiText"] as! String
}
}
今回は1つのデータだけだったが、投稿された全てのデータを取得する方法もある。
RailsのMySQLの方が書きやすいかも?migrateファイルとか無いのは楽ですけどね。
コメント