gpt4 book ai didi

javascript - 建表时Sequelse错误的外键名

转载 作者:可可西里 更新时间:2023-11-01 09:01:22 25 4
gpt4 key购买 nike

我开始尝试使用 node express 和 Sequelize。我以 Sequelize/express 为例来自他们的 git page,但是我在执行 de app 时遇到了问题。所有表都正确创建并且没有显示错误,但是当我查看表而不是创建名为 secretariaid 的外键时要引用 secretria 表,它会创建一个名为 secretarumid 的字段尝试使用数据库时出现抛出和错误。
我有点搞不清楚错误是什么:

models and migrations created using 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;
};

秘书.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);
});

似乎名称是问题所在,如果我使用“Secre”而不是“Secretaria”,它工作正常,但“Secret”或“Secret”+任何其他字母不会使表 secretaria 和外键结束复数上“secretariumId”。 “Secret++++++”是某种保留字吗?

更新

"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 修复了复数形式。现在一切正常。

最佳答案

这看起来是一个语言问题,我敢打赌基础表名是不正确的,而且 Sequelize 默认使用复数形式。 Sequelize 是英文的,使用 inflection library找出模型的单数/复数名称,如 Naming Strategy 中所述在文档中。由于看起来您使用的是西类牙语,因此它错误地将模型名称复数化。为了解决这个问题,您可以在模型定义中指定单数和复数名称的值,或者使用英文名称:P

查看 Sequelize.define()options.name 的详细信息文档。

您还可以通过设置 freezeTableName: true/选择数据库表名是复数(默认/false)还是单数(true)假的,。此选项实际上使用了您用于第一个参数的精确值 - 它将保持大小写等 - 但也用于使其在您的情况下成为单数。

  var Secretaria = sequelize.define('Secretaria', {
nombre_secretaria: DataTypes.STRING
},
name: {
singular: 'secretaria',
plural: 'secretarias',
},
freezeTableName: true, // table name is singular "Secreteria"

关于javascript - 建表时Sequelse错误的外键名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40980856/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com