Как хранить массив объектов в realm-js? - PullRequest
0 голосов
/ 24 мая 2018
    import Realm from 'realm';

    class Cities extends Realm.Object {}
    class Users extends Realm.Object {}

    Cities.schema = {
      name: 'Cities',
      properties: {
        'name': {
          type: 'string'
        },
        'pincode': {
          type: 'int'
        }
      }
    };

    Users.schema = {
      name: 'Users',
      primaryKey: 'id',
      properties: {
        'id': 'string',
        'name': {
          type: 'string'
        },
        'city': {
          type: 'list',
          objectType: 'Cities'
        }
      }
    };

    const schemaList = [Users, Cities];

    const realmInstance = new Realm({schema: schemaList});

    export default realmInstance;

// отправка cityObj (который уже присутствует в «Городах») для существующего пользователя:

onPress={() => this.addCity({name: 'Delhi', pincode: 110004})}

addCity = (cityObj) => {
    realm.write(() => {
      let user = realm.create('Users', {
        'id': 'someUniqueID'
      }, true);
      user.city.push(cityObj);
    });

    let cities = realm.objects('Cities');
    console.log('cities.length', cities.length);
  }

, хотя, пытаясь обновить запись в «Пользователи», транзакция записипишет новую запись в таблице городов, а также создает дубликаты.Почему так?

1 Ответ

0 голосов
/ 24 мая 2018

Добавление в список обычно создает новый объект.Но вы можете добавить первичный ключ к Cities, сначала создать / обновить объект и, наконец, поместить его в список.Что-то вроде:

const Realm = require('realm');

const CitiesSchema = {
    name: 'Cities',
    primaryKey: 'pincode',
    properties: {
        'name': {
            type: 'string'
        },
        'pincode': {
            type: 'int'
        }
    }
};

const UsersSchema = {
    name: 'Users',
    primaryKey: 'id',
    properties: {
        'id': 'string',
        'name': {
            type: 'string'
        },
        'city': {
            type: 'list',
            objectType: 'Cities'
        }
    }
};

const schemaList = [UsersSchema, CitiesSchema];
const realm = new Realm({schema: schemaList});


addCity = (cityObj) => {
    realm.write(() => {
        let city = realm.create('Cities', cityObj, true);
        let user = realm.create('Users', {
            id: 'someUniqueID',
            name: 'Foo Bar'
        }, true);
        user.city.push(city);
    });

    let cities = realm.objects('Cities');
    console.log('cities.length', cities.length);
}

addCity({name: 'Delhi', pincode: 110004});
addCity({name: 'Delhi', pincode: 110004});
...