node-orm sync към Alter Tables (подобно на 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