2016-08-13 16 views
0

、私は特急とsequelize ORM使用sequelize(ジャバスクリプトORM)(MySQLの)

を使用しています。しかし、私はモデルクラスを編集するときに、私の更新はありません気づきます私のデータベースに。例えば

、このarticle.jsという名前の記事モデル:

'use strict'; 

const SequelizeSlugify = require('sequelize-slugify'); 

module.exports = function (sequelize, DataTypes) { 
    let Article = sequelize.define('Article', { 
    title: { 
     type: DataTypes.STRING, 
     unique: true, 
     allowNull: false 
    }, 
    url: { 
     type: DataTypes.STRING, 
     unique: true, 
     allowNull: false 
    }, 
    description: { 
     type: DataTypes.STRING, 
     unique: true, 
     allowNull: false 
    }, 
    slug: { 
     type: DataTypes.STRING, 
     unique: true, 
     allowNull: false 
    } 
    }, { 
    classMethods: { 
     associate: function (models) { 
     // Article.hasMany(models.Comments); 
     } 
    } 
    }); 

    SequelizeSlugify.slugifyModel(Article, { 
     source: ['title'], 
     overwrite: false 
    }); 

    return Article; 
}; 

私は、このモデルでは、このようにフィールドを追加する場合:

testField: { 
    type: DataTypes.STRING, 
    unique: true, 
    allowNull: false 
} 

私はCMD npm startでサーバーを再起動した場合でも、私の編集内容はデータベースに読み込まれたり登録されたりしません。 実際、私のデータテーブルを更新するには、それらを削除してノードサーバーを再起動する必要があります。

さらに、Sequelizeが私のモデルを登録する理由、たとえばarticle.jsを私のデータベースの記事のような複数の名前として知っておきたいと思います。どのようにこの動作から防止するには?

'use strict'; 

const fs  = require('fs'); 
const path  = require('path'); 
const Sequelize = require('sequelize'); 
const config = require(__dirname+'/database.json'); 
const db  = {}; 

let sequelize = new Sequelize(config.db.dbname, config.db.user, config.db.password, { 
    host: config.db.host, 
    port: config.db.port 
}); 

fs.readdirSync(__dirname + '/models').filter(function (file) { 
    return (file.indexOf('.') !== 0); 
}).forEach(function (file) { 
    let model = sequelize['import'](path.join(__dirname + '/models', file)); 
    db[model.name] = model; 
}); 

Object.keys(db).forEach(function (modelName) { 
    if ('associate' in db[modelName]) { 
    db[modelName].associate(db); 
    } 
}); 

db.sequelize = sequelize; 
db.Sequelize = Sequelize; 

module.exports = db; 

答えて

0

は、私は複数のテーブル名の解決策を見つけた:

ファイルarticle.jsは、私が同じフォルダに、このようなindex.jsファイルを持っているデータベースにモデルをインポートするために、私のフォルダmodelsです。実際には、Sequelize宣言にモデル定義を含める必要があります。

ファイルの残りの部分はまだ私は私の最初の記事で書いたものと同じである:私はこのようなdatabase.js新しいSequelizeを宣言するときに

は、doc here後、私はいくつかの引数を追加します。

ありがとう、ハッピーコーディング。これがあなたの何人かを助けることができれば嬉しいです!

誰かがmysqlから直接データテーブルを削除せずにデータテーブルを更新する方法について知っていれば、彼の答えを編集するのをためらってください。

関連する問題