实现简单关系模型的插入(嵌套对​​象)

时间:2017-10-19 12:56:20

标签: react-native realm

我试图将我的思想从理性数据库转移到领域,我有一个小问题。

我有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”模型中的记录。

谢谢

尤瓦

1 个答案:

答案 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
}