RealmをCRUD処理のうち、今回はデータの読み込み(Read)処理のやり方について紹介します。
Realmを使ってデータを取得する
1. 準備
RealmSwiftをインポートしておきます。
import RealmSwift
また、モデルを先に用意しデータが登録されている必要があります。
2. 全件取得
データベースから全件取得したい場合、次のように書きます。
//① Realmのインスタンス生成
let realm = try! Realm()
// ②全件取得
let result = realm.objects(モデルクラス名.self)
実際に書いてみると次のようになります。
let realm = try! Realm()
// 社員を全件取得
let result = realm.objects(Employee.self)
これで、社員の情報がすべて抽出できます。
3. 条件指定で取得
条件を設定するには filter()メソッド を使います。
① 文字列で条件文を書く方法
//① Realmのインスタンス生成
let realm = try! Realm()
// ②文字列で条件文を書いてデータを取得
let result = realm.objects(モデルクラス名.self).filter("クエリ")
実際に、社員モデルから30歳以上の社員を抜き出すとすると次のように書けます。
// Realmのインスタンス生成
let realm = try! Realm()
// 30歳以上の社員を取得
let result = realm.objects(Employee.self).filter("age >= 30")
② 条件文で使える演算子色々
●比較演算子
A == B | AとBが等しい |
A < B | AはBより小さい |
A > B | AはBより大きい |
A <= B | AはB以下 |
A >= B | AはB以上 |
A != B | AとBが等しくない |
A BETWEEN {10, 30} | Aは10〜30の間の値 |
●パターン演算子
CONTAINS | 指定した文字列を含む |
BEGINSWITH | 先頭が指定した文字列と一致する |
ENDSWITH | 末尾が指定した文字列と一致する |
LIKE | 曖昧検索 |
●論理演算子
AND | 条件1、条件2が一致する |
OR | 条件1、条件2のいずれか、もしくは両方が一致。 |
NOT | 条件に一致しない |
英語ですが、Realmのサイトにチートシートがあるので、こちらをダウンロードしておくと便利です。
4. 特定のカラム(変数)のみのデータが欲しい場合
import Foundation
import RealmSwift
class Person: Object {
@objc dynamic var name: String = ""
@objc dynamic var age: Int = 0
}
例えば、上のようなモデルがあって、「name」だけのデータが欲しいという場合は次のようにvalue()メソッドを使用します。
//① Realmのインスタンス生成
let realm = try! Realm()
// ②nameだけ取得
let result = realm.objects(Person.self).value(forKey: "name")
5. ソート
取得結果の並び順を変えるには、sorted()メソッド を使用します。
//① Realmのインスタンス生成
let realm = try! Realm()
// ②ソート条件を追加
let result = realm.objects(モデルクラス名.self).sorted(byKeyPath: "プロパティ名", ascending: Bool値)
byKeyPathで何を基準に並び替えるのかプロパティをセットします。
ascendingは昇順に並べるかどうかで、昇順に並べたい場合はtrue、降順に並べたい場合はfalseをセットします。
例えば、次のように書くと、社員を若いものから年齢順に並べてデータを取得することが可能です。
let realm = try! Realm()
// 社員を全件取得
let result = realm.objects(Employee.self).sorted(byKeyPath: "age", ascending: true)
created by Rinker
¥3,168
(2024/11/23 00:36:00時点 Amazon調べ-詳細)
(2024/11/23 00:36:00時点 Amazon調べ-詳細)