Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

CRUD - 削除 - C++ SDK

項目一覧

  • Realm オブジェクトの削除
  • オブジェクトの削除
  • 逆関係の削除
  • マップのキーと値の削除
  • 設定値の削除

Realm オブジェクトの削除は、書込みトランザクション (write transaction) 内で実行される必要があります。 書込みトランザクション (write transaction) の詳細については、「書込みトランザクション (write transaction) 」を参照してください。

Realm からオブジェクトを削除するには、書込みトランザクション内でオブジェクトを Realm.remove() 関数に渡します。

realm.write([&] { realm.remove(managedDog); });

逆の関係を直接削除することはできません。 代わりに、関連オブジェクトを通じて関係を削除することで、逆関係が自動的に更新されます。

この例では、 PersonDogと 1 の関係にあり、 DogPersonと逆の関係にあります。 Person.dogの関係をnullptrに設定すると、 Dogオブジェクトから逆の関係が削除されます。

auto config = realm::db_config();
auto realm = realm::db(std::move(config));
auto dog = realm::Dog{.name = "Wishbone"};
auto [joe] = realm.write([&realm]() {
auto person =
realm::Person{.name = "Joe", .age = 27, .dog = nullptr};
return realm.insert(std::move(person));
});
// Assign an object with an inverse relationship
// to automatically set the value of the inverse relationship
realm.write([&dog, joe = &joe]() { joe->dog = &dog; });
CHECK(joe.dog->owners.size() == 1);
// ... Later ...
// Removing the relationship from the parent object
// automatically updates the inverse relationship
realm.write([joe = &joe]() { joe->dog = nullptr; });
CHECK(realm.objects<realm::Dog>()[0].owners.size() == 0);

この例では、次のモデルを使用します。

struct Dog;
struct Person {
realm::primary_key<int64_t> _id;
std::string name;
int64_t age = 0;
Dog* dog;
};
REALM_SCHEMA(Person, _id, name, age, dog)
struct Dog {
realm::primary_key<int64_t> _id;
std::string name;
int64_t age = 0;
linking_objects<&Person::dog> owners;
};
REALM_SCHEMA(Dog, _id, name, age, owners)

マップキーを削除するには、キー名をerase()に渡します。

realm.write([&] { tommy.locationByDay.erase("Tuesday"); });

erase()を使用してセット要素を削除するか、 clear()を使用してセットからすべての要素を削除できます。

// Remove an element from the set with erase()
auto it3064 = managedDocsRealm.openPullRequestNumbers.find(3064);
CHECK(it3064 != managedDocsRealm.openPullRequestNumbers.end());
realm.write([&] { managedDocsRealm.openPullRequestNumbers.erase(it3065); });
CHECK(managedDocsRealm.openPullRequestNumbers.size() == 4);
// Clear the entire contents of the set
realm.write([&] { managedDocsRealm.openPullRequestNumbers.clear(); });
CHECK(managedDocsRealm.openPullRequestNumbers.size() == 0);

戻る

Update