如何在RealmJS中直接关联对象?无需通过父对象添加子对象
解决方案
首先要明确:你当前CarSchema中的owner字段是**linkingObjects类型**,这是Realm的只读反向关联属性,仅用于从Car查询关联的Person,无法通过赋值来建立关联关系。要实现创建Car时直接绑定所有者,需要调整Schema并使用正向关联。
步骤1:修正Schema定义
给Person添加主键(方便通过ID快速关联),并给Car新增一个可写的正向关联字段(用于绑定所有者):
const PersonSchema = { name: 'Person', primaryKey: 'id', // 新增主键,假设用字符串类型ID properties: { id: 'string', name: 'string', cars: 'Car[]' // 正向关联:一个Person拥有多个Car }, }; const CarSchema = { name: 'Car', properties: { model: 'string', owner: {type: 'Person', optional: false} // 正向关联:一个Car属于一个Person(可写) // 若仍需反向查询(从Car查Person),直接用这个owner字段即可,无需保留原来的linkingObjects }, };
步骤2:创建Car时直接关联所有者
如果Person对象已经存在,无需提前查询该对象,直接通过主键ID关联:
realm.write(() => { const car = realm.create('Car', { model: 'Model name', owner: { id: ownerID } // 直接传入Person的主键,Realm会自动关联对应对象 }); });
补充说明
- 如果你的
Person尚未设置主键,必须先查询到对应的Person对象,再传入owner字段:realm.write(() => { // 通过查询获取已存在的Person对象 const targetPerson = realm.objects('Person').filtered('name = $0', '张三')[0]; const car = realm.create('Car', { model: 'Model name', owner: targetPerson }); }); - 若
Person对象还未创建,需要先在事务中创建Person,再关联Car,否则会触发关联对象不存在的错误。
内容的提问来源于stack exchange,提问作者Dridi
相关产品推荐
相关产品推荐

