CRUD - アップデート - Flutter SDK
RealmObjects
への更新は書込みトランザクション内で発生する必要があります。 書込みトランザクション (write transaction) の詳細については、「書込みトランザクション (write transaction) 」を参照してください。
SDK はアップデートとアップサート操作をサポートします。 アップサート操作では、オブジェクトの新しいインスタンスが挿入されるか、特定の条件を満たす既存のオブジェクトが更新されます。 詳細については、このページの「アップサート オブジェクト」セクションを参照してください。
非対称オブジェクトは更新できません。 これは、非対称オブジェクトがデータベースに永続しない特殊な書込み専用オブジェクトであるためです。 アプリケーションで非対称オブジェクトを使用する方法の詳細については、「 Atlas へのデータのストリーム - Flutter SDK 」を参照してください。
更新オブジェクト
このページの例では、 Person
とTeam
という 2 つのオブジェクトタイプを使用しています。
()class _Person { () late ObjectId id; late String name; late List<String> hobbies; } ()class _Team { () late ObjectId id; late String name; late List<_Person> crew; late RealmValue eventLog; }
オブジェクト プロパティを更新
オブジェクトのプロパティを変更するには、書込みトランザクション (write transaction) ブロックでプロパティをアップデートします。
realm.write(() { spaceshipTeam.name = 'Galactic Republic Scout Team'; spaceshipTeam.crew .addAll([Person(ObjectId(), 'Luke'), Person(ObjectId(), 'Leia')]); });
オブジェクトをアップサートする
オブジェクトをアップサートするには、 Realm.add() update
を呼び出しますtrue
トランザクション ブロック内でオプションの フラグが に設定されている場合。操作は、指定されたプライマリキーを持つオブジェクトが存在しない場合に、そのプライマリキーを持つ新しいオブジェクトを挿入します。そのプライマリキーを持つオブジェクトがすでに存在する場合、この操作により、その プライマリプライマリキーの既存のオブジェクトがアップデートされます。
final id = ObjectId(); // Add Anakin Skywalker to the realm with primary key `id` final anakin = Person( id, "Anakin Skywalker", ); realm.write(() { realm.add<Person>(anakin); }); // Overwrite the 'Anakin' Person object // with a new 'Darth Vader' object final darthVader = Person(id, 'Darth Vader'); realm.write(() { realm.add<Person>(darthVader, update: true); });