синхронизация node-orm с таблицами Alter (аналогично DataMapper.auto_upgrade)

Я использую node-orm, чтобы попытаться настроить свою базу данных. Вот код модели.

db = orm.connect("mysql", client, (success, db) ->
  Strain = db.define("strain",
    name:
      type: "string"
      validations: [ orm.validators.unique() ]
    old_body:
      type: "string"
    body:
      type: "string"
    created_at:
      type: "date"
    update_at:
      type: "date"
  )
  Strain.sync()
) 

Я изменил файл /orm/lib/databases/mysql.js на console.log для возвращаемой информации о синхронизации.

this._client.query(_query, function (err, info) {
  console.log(err);
  console.log(info);
  console.log("collection synced");
});

Это вывод при первом запуске Strain.sync().

null

{ affectedRows: 0,
  insertId: 0,
  serverStatus: 2,
  warningCount: 0,
  message: '',
  setMaxListeners: [Function],
  emit: [Function],
  addListener: [Function],
  on: [Function],
  once: [Function],
  removeListener: [Function],
  removeAllListeners: [Function],
  listeners: [Function] }

collection synced

Теперь таблица создана, как и должно быть. Когда я перезапускаю сервер и снова запускаю Strain.sync(), это вывод:

null

{ affectedRows: 0,
  insertId: 0,
  serverStatus: 2,
  warningCount: 1,
  message: '',
  setMaxListeners: [Function],
  emit: [Function],
  addListener: [Function],
  on: [Function],
  once: [Function],
  removeListener: [Function],
  removeAllListeners: [Function],
  listeners: [Function] }

collection synced

Счетчик предупреждений подскочил до «1», но ошибка равна нулю, а сообщение пусто.

Мне нужно выяснить, как я могу изменить модель и добавить новое свойство, например «deleted_at», и обновить таблицу БЕЗ потери данных. Я знаю, что могу выполнить Strain.sync(force: true), но это удалит таблицу, а затем создаст ее заново. Я просто хочу обновить таблицу, подобно функции auto_upgrade DataMapper.

Есть ли способ сделать это с помощью node-orm или любого ORM, который работает с nodejs?


person Effektz    schedule 23.05.2012    source источник


Ответы (1)


Почти уверен, что текущая версия sync() только создает таблицы, а не обновляет их.

Примечание: sync() в данный момент создает только таблицы; модификации таблицы будут добавлены в следующей версии.

https://github.com/dresende/node-orm#creating-the-model-on-the-database

person leeway    schedule 26.09.2012