【Realm】データの更新・削除(Update・Delete)処理の書き方

RealmをCRUD処理のうち、今回はデータの更新(Update)と削除(Delete)処理のやり方について紹介します。

先にモデルを用意しておく必要があるので、まだの場合はこちらの記事を参考に作成しておいてください。

【Realm】モデルの定義・リレーション

データを更新・削除する方法

Realmにデータを更新・削除するには次のような流れでコードを記述していきます。

  1. realmインスタンスを生成する
  2. 更新 or 削除したいデータを検索する
  3. 検索したデータを更新 or 削除する

例えば次のような社員モデルがあったとします。

import Foundation
import RealmSwift 

// 社員モデル
class  Employee: Object {
  @objc dynamic var id: Int= 0  // 社員ID
  @objc dynamic var name: String = ""  // 社員名
  @objc dynamic var department: String = ""  // 部署
}

ここに、次のようなデータがあったとして、このデータを更新・削除する例を紹介します。

カラム名
社員ID 123
社員名 田中 花子
部署 経理部



データ更新の例

例えば、部署を異動した時や結婚などにより苗字が変わった場合、データベースの更新が必要ですね。

今回は「田中花子」さんが経理部から総務部へ移動したと想定してデータを更新します。

// ① realmインスタンスの生成
let realm = try! Realm()

// ② 更新したいデータを検索する
let targetEmployee = realm.objects(Employee.self).filter("id == 123")

// ③ 部署を更新する
do{
  try realm.write{
    targentEmployee.department = "総務部"
  }
}catch {
  print("Error \(error)")
}

上記では、まず社員IDを使って「田中花子」さんのデータを抽出し、realm.write{}の中で、departmentプロパティに新しい値(総務部)を代入しています。

これで、田中花子さんの部署名は「経理部」から「総務部」へ更新されます。

もし、データの抽出(検索)方法がわからないという方は、こちらの記事で解説しているので参考にしてください。

【Realm】データの読み込み(Read)処理の書き方

データ削除の例

例えば、会社を辞めた場合はデータを削除する必要がありますね。

今回は先ほどの「田中花子」さんが退職したと想定して、データを削除します。

流れは先ほどの更新とだいたい同じです。

// ① realmインスタンスの生成
let realm = try! Realm()

// ② 削除したいデータを検索する
let targetEmployee = realm.objects(Employee.self).filter("id == 123")

// ③ 部署を更新する
do{
  try realm.write{
    realm.delete(targetEmployee)
  }
}catch {
  print("Error \(error)")
}

データを削除したい場合はdelete()メソッドを使います。

削除したいデータを検索して、それをdelete()メソッドの引数に渡してあげるだけで完了です。

削除時の注意点(リレーションがある場合)

リレーションがある場合、リレーション先のデータも別途削除しなければゴミデータが残るので注意してください。

例えば、次のように社員1人1人に対して、使用するコンピューターを管理するコンピューターモデルがあったとします。

simport Foundation
import RealmSwift 

// 社員モデル
class  Employee: Object {
  @objc dynamic var id: Int= 0  // 社員ID
  @objc dynamic var name: String = ""  // 社員名
  @objc dynamic var department: String = ""  // 部署
  @objc dynamic var computer: Computer? // Computerモデルと1対1の関係  
}

// コンピュータモデル
class Computer: Object {
  @objc dynamic var name: String = ""  // コンピューター名前
  @objc dynamic var brand: String = ""  // メーカー
}

「田中花子」さんの退職に伴い、先ほどrealm.delete()で削除しましたが、これだけですとコンピューターモデルには田中花子さんが使っていたコンピューターの情報が残ってしまいます。

そのため、不要であれば、こちらのデータも削除しておく必要があります。

created by Rinker
¥3,168 (2022/12/08 11:52:13時点 Amazon調べ-詳細)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA