2016-12-04 3 views
2

2つのモデル間で外部キーを参照しようとしています。は、Model.belongsToのSequelize.Modelのインスタンスではないもので呼び出されました

が、私はこのエラーを取得しています:

throw new Error(this.name + '.' + Utils.lowercaseFirst(Type.toString()) + ' called with something that\'s not an instance of Sequelize.Model'); 
called with something that's not an instance of Sequelize.Model 
    at Model.belongsTo 

が、私はこれをどのように修正することができますか?

これまでのコードです。

これはこれはこれは私のモデル/ index.js

"use strict"; 

var fs  = require("fs"); 
var path  = require("path"); 
var Sequelize = require('sequelize') 
    , sequelize = new Sequelize(process.env.MYSQL_DB, process.env.MYSQL_USER, process.env.MYSQL_PASSWORD, { 
     dialect: "mysql", // or 'sqlite', 'postgres', 'mariadb' 
     port: 3306, // or 5432 (for postgres) 
}); 


var db = {}; 
fs 
    .readdirSync(__dirname) 
    .filter(function(file) { 
    return (file.indexOf(".") !== 0) && (file !== "index.js"); 
    }) 
    .forEach(function(file) { 
    var model = sequelize.import(path.join(__dirname, 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; 

答えて

6

使用である私のモデル/ user.jsの

"use strict"; 

module.exports = function(sequelize, DataTypes) { 
    var User = sequelize.define("User", { 
    id: { 
      type: DataTypes.INTEGER, 
      autoIncrement: true, 
      primaryKey: true 
     }, 
    name: DataTypes.STRING, 
    slack_id: DataTypes.STRING, 
    environment_hash: { 
      type: DataTypes.STRING, 
      defaultValue: DataTypes.UUIDV4 
     } 
    }, { 
    tableName: 'users', 
    underscored: false, 
    timestamps: false 
    } 

); 

    return User; 
}; 

である私のモデル/ mercadolibre.js

"use strict"; 
var User = require('../models/index').User; 

module.exports = function(sequelize, DataTypes) { 
    var MercadoLibre = sequelize.define("MercadoLibre", { 
    id: { 
      type: DataTypes.INTEGER, 
      autoIncrement: true, 
      primaryKey: true 
     }, 
    access_token: DataTypes.STRING, 
    refresh_token: DataTypes.STRING, 
    environment_hash: DataTypes.STRING 
    }, { 
    tableName: 'mercadolibres', 
    underscored: true, 
    timestamps: true 
    } 

); 

    MercadoLibre.belongsTo(User); 

    return MercadoLibre; 
}; 

ですこのように:

module.exports = function(sequelize, DataTypes) { 
var MercadoLibre = sequelize.define("MercadoLibre", { 
    id: { 
     type: DataTypes.INTEGER, 
     autoIncrement: true, 
     primaryKey: true 
    }, 
    access_token: DataTypes.STRING, 
    refresh_token: DataTypes.STRING, 
    environment_hash: DataTypes.STRING 
}, { 
    tableName: 'mercadolibres', 
    underscored: true, 
    timestamps: true, 
    classMethods: { 
     associate : function(models) { 
      MercadoLibre.belongsTo(models.User) 
     }, 
     }, 
    }); 



return MercadoLibre; 

};

+0

このモデルではuser_idはありません。 – farhadamjady

関連する問題