我试图将我的思想从理性数据库转移到领域,我有一个小问题。
我有2个数据模型:
Station.schema = {
PS> $data Name Value ---- ----- name prodsql01 address {Number, Road, City} PS> $data.address Name Value ---- ----- Number 10 Road Downing Street City London PS> $data.address.road Downing Street
}
StationType.schema = {
name: 'Station', primaryKey: 'id', properties:{ id: 'int', // primary key stationName : {type: 'string'}, stationType : {type:'StationType'} }
}
我试图插入具有名为“stationType”的对象属性的对象“station”的新记录。 stationType对象预先填充了固定值。
每当我执行对象“Station”的插入时,它都会尝试插入已经存在的“stationType”属性的值。
如何防止插入对象属性?我只希望“stationType”属性指向“StationType”模型中的记录。
谢谢
尤瓦
答案 0 :(得分:0)
如何阻止插入对象属性?
您不需要阻止它,因为如果您为true
指定realm.create()
参数,那么如果它存在,它会尝试更新它而不是创建它。
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
}