我试图将我的想法从理性数据库转移到领域,但我有一个小问题。
我有 2 个数据模型:
Station.schema = {
name: 'Station', primaryKey: 'id', properties:{ id: 'int', // primary key stationName : {type: 'string'}, stationType : {type:'StationType'} }
}
StationType.schema = {
name: 'StationType', primaryKey: 'id', properties:{ id: 'int', // primary key typeName : {type: 'string'}, }
}
我试图插入对象"站"的新记录,该记录具有名为"站类型"的对象属性。stationType 对象预先填充了固定值。
每当我执行对象"Station"的插入时,它都会尝试插入已经存在的"stationType"属性的值。
如何防止插入对象属性?我只希望"stationType"属性指向"StationType"模型中的记录。
谢谢
尤瓦尔
如何防止插入对象属性?
您不需要阻止它,因为如果您为 realm.create()
指定true
参数,那么如果它存在,它将尝试更新它而不是创建它。
realm.write(() => {
// Create a book object
realm.create('Book', {id: 1, title: 'Recipes', price: 35});
// Update book with new price keyed off the id
realm.create('Book', {id: 1, price: 55}, true); // <-- true
});
如果不想更新它,则需要查询托管对象,并根据需要修改事务中的托管对象。
编辑:
如果您的托管对象已经由 realm.create()
创建,则可以像这样查询它
realm.write(() => {
let book = realm.objects('Book').filtered('bookId == ' + bookId)[0];
if(book == null) {
book = realm.create('Book', {id: 1, title: 'Recipes');
}
let author = realm.objects('Author').filtered('authorId == ' + authorId)[0];
book.author = author; // sets the field for the managed object
}