我开始玩node express和Sequelize。我从他们的git页面跟随Sequelize/express
的例子,但是当我执行de app时我遇到了问题。所有表都是正确创建的并且没有显示错误,但是当我查看表而不是创建名为secretariaid
的外键来引用secretaria表时,它创建了一个名为secretarumid
的字段,其中包含throws和error当试图使用数据库时。我有点混淆是错误:
使用sequelize model创建的模型和迁移:create。
oficina.js
'use strict';
module.exports = function(sequelize, DataTypes) {
var Oficina = sequelize.define('Oficina', {
nombre_oficina: DataTypes.STRING,
direccion: DataTypes.STRING,
telefono: DataTypes.STRING,
interno: DataTypes.STRING,
email: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
Oficina.belongsTo(models.Secretaria, {
onDelete: "CASCADE",
foreignKey: {
allowNull: false
}
});
}
}
});
return Oficina;
};
secretaria.js
'use strict';
module.exports = function(sequelize, DataTypes) {
var Secretaria = sequelize.define('Secretaria', {
nombre_secretaria: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
Secretaria.hasMany(models.Oficina);
}
}
});
return Secretaria;
};
www.js上的sync()
models.sequelize.sync().then(function() {
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
});
如果不是" Secretaria"它会接触名称是问题所在。我使用" Secre"它工作正常,但"秘密"或"秘密" +任何其他字母都没有复数表secretaria和外键最终" secretariumId"。 是"秘密+++++"某种保留字?
更新
"use strict";
module.exports = function(sequelize, DataTypes) {
var Secretaria = sequelize.define("Secretaria",
{
nombre: DataTypes.STRING
},
{
classMethods: {
associate: function(models) {
Secretaria.hasMany(models.Oficina)
}
},
name: {
singular: 'secretaria',
plural: 'secretarias',
},
tableName: "secretarias"
});
return Secretaria;
};
使用选项名称可修复外键问题,tableName正在修复复数。现在一切正常。
答案 0 :(得分:0)
这看起来是一个语言问题,我打赌基础表名称不正确,Sequelize默认使用复数。 Sequelize是英文版,使用inflection library来计算模型的单数/复数名称,如文档中的Naming Strategy所述。由于您看起来使用的是西班牙语,因此错误地复制了模型的名称。要解决此问题,您可以在模型定义中指定单数和复数名称的值,或使用英文名称:P
在Sequelize.define
()文档下查看options.name
的详细信息。
您还可以通过设置false
来选择是否希望数据库表名称为复数(默认/ true
)或单数(freezeTableName: true/false,
)。这个选项实际上是使用你用于第一个参数的 exact 值 - 它将保持大小写等等 - 但也有助于在你的情况下使它成为单数。
var Secretaria = sequelize.define('Secretaria', {
nombre_secretaria: DataTypes.STRING
},
name: {
singular: 'secretaria',
plural: 'secretarias',
},
freezeTableName: true, // table name is singular "Secreteria"