我正在尝试使用Sequelize和Postgresql将带有外键约束的user_id列添加到Node Express中的Todo表 . 我收到一条错误消息,说"Unhandled rejection SequelizeDatabaseError: column " UserId " does not exist" . 如您所见,SELECT查询中既有"userId"又有"UserId" .
SELECT查询由简单的Todo.findAll()构建 . 我认为在迁移文件中创建外键约束的方法有点不对劲20161116202040-add-user-id-to-todos.js
module.exports = {
up: function (queryInterface, Sequelize) {
return queryInterface.addColumn(
'Todos',
'userId', {
type: Sequelize.INTEGER,
references: {
model: 'Users',
key: 'id'}})},
models / user.js看起来像这样:
module.exports = function(sequelize, DataTypes) {
var User = sequelize.define('User', {
email: DataTypes.STRING,
password: DataTypes.STRING
}, {
classMethods: {
associate: function(models) {
User.hasMany(models.Todo);}}});
return User;};
models / todo.js看起来像这样:
module.exports = function(sequelize, DataTypes) {
var Todo = sequelize.define('Todo', {
name: DataTypes.STRING,
userId: DataTypes.INTEGER
},{
classMethods: {
associate: function(models) {
Todo.belongsTo(models.User); }}});
return Todo;};
1 回答
Sequelize有一种通过模型名称关联相关模型的方法 .
所以举个例子
但在您的情况下,您将表名作为大写字母:
因此,在您的情况下,您可以将
userId
重命名为UserId
或明确指定foreignKey