1

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」にジャンプしましたが、err は null で、メッセージは空です。

モデルを変更して「deleted_at」などの新しいプロパティを追加し、データを失うことなくテーブルを更新する方法を理解する必要があります。Strain.sync( force: true ) を実行できることはわかっていますが、それではテーブルが削除されてから再作成されます。DataMapper の auto_upgrade 関数と同様に、テーブルを更新しようとしています。

node-orm、またはnodejsで動作するORMでこれを行う方法はありますか?

4

1 に答える 1

1

sync() の現在のバージョンがテーブルを作成するだけで、更新しないことを確認してください。

注: sync() は現時点ではテーブルのみを作成します。テーブルの変更は、次のバージョンで追加されます。

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

于 2012-09-26T00:27:50.330 に答える