CRUD - 削除 - C++ SDK
Atlas Device SDK は非推奨です。 詳細については、 の廃止ページを参照してください。
Realm オブジェクトの削除
Realm オブジェクトの削除は、書込みトランザクション (write transaction) 内で実行される必要があります。 書込みトランザクション (write transaction) の詳細については、「書込みトランザクション (write transaction) 」を参照してください。
オブジェクトの削除
Realm からオブジェクトを削除するには、書込みトランザクション内でオブジェクトを Realm.remove() 関数に渡します。
realm.write([&] { realm.remove(managedDog); });
逆関係の削除
逆の関係を直接削除することはできません。 代わりに、関連オブジェクトを通じて関係を削除することで、逆関係が自動的に更新されます。
この例では、 Person
はDog
と 1 の関係にあり、 Dog
はPerson
と逆の関係にあります。 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);