Koy*_*Koy 10 node.js sequelize.js
我在我的 Node js 应用程序中使用sequelize。所有模型都在名为的单独文件中定义,例如,user.js
等message.js
。我还有index.js
自动生成的文件,这是其中的一个片段,您可能会认出它:
if (config.use_env_variable) {
sequelize = new Sequelize(process.env[config.use_env_variable], config);
} else {
sequelize = new Sequelize(config.database, config.username, config.password, config);
}
fs
.readdirSync(__dirname)
.filter(file => {
return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js');
})
.forEach(file => {
const model = sequelize['import'](path.join(__dirname, file));
db[model.name] = model;
});
Object.keys(db).forEach(modelName => {
if (db[modelName].associate) {
db[modelName].associate(db);
}
});
db.sequelize = sequelize;
db.Sequelize = Sequelize;
Run Code Online (Sandbox Code Playgroud)
所以我在这里查看sequelize的关联手册。我无法弄清楚的是,在我的情况下,这会去哪里,因为我使用的是自动生成的index.js
文件,该文件收集所有models
. 在他们的示例中,正如您在链接上看到的,他们有类似的内容:
const A = sequelize.define('A', /* ... */);
const B = sequelize.define('B', /* ... */);
A.hasOne(B); // A HasOne B
A.belongsTo(B); // A BelongsTo B
A.hasMany(B); // A HasMany B
A.belongsToMany(B, { through: 'C' });
Run Code Online (Sandbox Code Playgroud)
当我的模型分布在多个文件中时,我该如何做同样的事情?我尝试过这样的事情(例如,在消息模型中):
return sequelize.define('message', {
message_id: {
type: DataTypes.BIGINT,
allowNull: false,
autoIncrement:true,
primaryKey: true
},
user_id: {
type: DataTypes.BIGINT,
allowNull: true
}
// and other stuff..
}, {
tableName: 'message'
}).hasOne(require('./user'));
};
Run Code Online (Sandbox Code Playgroud)
这给出了一个错误:message.hasOne 调用的内容不是 Sequelize.Model 的子类
有任何想法吗?
谢谢。
我是这样做的:
module.exports = (sequelize, DataTypes) => {
const MyEntity = sequelize.define(
'MyEntity',
{
name: DataTypes.STRING
},
{}
);
MyEntity.associate = function(models) {
// associations can be defined here
MyEntity.hasMany(models.OtherEntity, {
foreignKey: 'myEntityId',
as: 'myEntities'
});
};
return MyEntity;
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4028 次 |
最近记录: |