我正在尝试为数据库播种但 Sequelize 出现问题:无法打开引用的 table 'undefined'
I am trying to seed a database but having a problem with Sequelize: Failed to open the referenced table 'undefined'
我在终端中收到此错误消息:SequelizeDatabaseError:无法打开引用的 table 'undefined'。终端消息没有指向我的任何文件,所以很难理解它的来源。
看起来问题与 table 之间的关系如何建立有关。
我的模型是:
Users.js
const {DataTypes, Model} = require('sequelize');
const sequelize = require('../config/connection');
const Message = require('./Message');
class User extends Model {
}
User.init(
{
user_id:{type: DataTypes.INTEGER, primaryKey:true, notNull:true,},
username:{type: DataTypes.STRING, allowNull:false, unique:true},
first_name:{type: DataTypes.STRING, allowNull:false},
last_name:{type: DataTypes.STRING, allowNull:false},
password:{type: DataTypes.STRING, allowNull:false},
},
{
sequelize,
freezeTableName: true,
modelName: 'User',
underscored: true,
timestamps: false,
},
);
module.exports = User;
``````
Message.js
``````lang-js
const {DataTypes, Model} = require('sequelize');
const sequelize = require('../config/connection');
const User = require('./User');
const Comment = require('./Comment');
class Message extends Model {
}
Message.init(
{
message_id: {
type: DataTypes.INTEGER,
primaryKey: true,
notNull: true,
autoincrement: true,
references: {model: Comment, key: 'message_id'}
},
content: {type: DataTypes.STRING},
username: {type: DataTypes.STRING, allowNull:false, references: {model: User, key: 'user_id'}},
},
{
sequelize,
freezeTableName: true,
modelName: 'Message',
timestamps: false,
underscored: true,
}
);
module.exports = Message;
``````
What am I doing wrong?
我删除了模型中的所有引用,还允许 Sequelize 自行创建外键字段。
这些更改成功了:
const {DataTypes, Model} = require('sequelize');
const sequelize = require('../config/connection');
class Message extends Model {
}
Message.init(
{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false,
},
title: {type: DataTypes.STRING},
content: {type: DataTypes.STRING},
//user_id: {type: DataTypes.INTEGER, allowNull: false},
// user_id: {type: DataTypes.INTEGER, allowNull: false, references: {model: sequelize.models.User, key:"user_id"}},
},
{
sequelize,
modelName: 'Message',
freezeTableName: true,
underscored: true,
timestamps: true,
}
);
module.exports = Message;
models/index.js :
const Sequelize = require('sequelize');
const User = require('./User')
const Message = require('./Message')
const Comment = require('./Comment')
User.hasMany(Message, {foreignKey: {name: 'user_id', allowNull: false,}});
Message.belongsTo(User);
Message.hasMany(Comment, {foreignKey: {name: 'message_id', allowNull: false,}});
Comment.belongsTo(Message);
User.hasMany(Comment, {foreignKey: {name: 'user_id', allowNull: false,}});
Comment.belongsTo(User);
module.exports = {User, Message, Comment}
我在终端中收到此错误消息:SequelizeDatabaseError:无法打开引用的 table 'undefined'。终端消息没有指向我的任何文件,所以很难理解它的来源。
看起来问题与 table 之间的关系如何建立有关。
我的模型是:
Users.js
const {DataTypes, Model} = require('sequelize');
const sequelize = require('../config/connection');
const Message = require('./Message');
class User extends Model {
}
User.init(
{
user_id:{type: DataTypes.INTEGER, primaryKey:true, notNull:true,},
username:{type: DataTypes.STRING, allowNull:false, unique:true},
first_name:{type: DataTypes.STRING, allowNull:false},
last_name:{type: DataTypes.STRING, allowNull:false},
password:{type: DataTypes.STRING, allowNull:false},
},
{
sequelize,
freezeTableName: true,
modelName: 'User',
underscored: true,
timestamps: false,
},
);
module.exports = User;
``````
Message.js
``````lang-js
const {DataTypes, Model} = require('sequelize');
const sequelize = require('../config/connection');
const User = require('./User');
const Comment = require('./Comment');
class Message extends Model {
}
Message.init(
{
message_id: {
type: DataTypes.INTEGER,
primaryKey: true,
notNull: true,
autoincrement: true,
references: {model: Comment, key: 'message_id'}
},
content: {type: DataTypes.STRING},
username: {type: DataTypes.STRING, allowNull:false, references: {model: User, key: 'user_id'}},
},
{
sequelize,
freezeTableName: true,
modelName: 'Message',
timestamps: false,
underscored: true,
}
);
module.exports = Message;
``````
What am I doing wrong?
我删除了模型中的所有引用,还允许 Sequelize 自行创建外键字段。
这些更改成功了:
const {DataTypes, Model} = require('sequelize');
const sequelize = require('../config/connection');
class Message extends Model {
}
Message.init(
{
id: {
type: DataTypes.INTEGER,
autoIncrement: true,
primaryKey: true,
allowNull: false,
},
title: {type: DataTypes.STRING},
content: {type: DataTypes.STRING},
//user_id: {type: DataTypes.INTEGER, allowNull: false},
// user_id: {type: DataTypes.INTEGER, allowNull: false, references: {model: sequelize.models.User, key:"user_id"}},
},
{
sequelize,
modelName: 'Message',
freezeTableName: true,
underscored: true,
timestamps: true,
}
);
module.exports = Message;
models/index.js :
const Sequelize = require('sequelize');
const User = require('./User')
const Message = require('./Message')
const Comment = require('./Comment')
User.hasMany(Message, {foreignKey: {name: 'user_id', allowNull: false,}});
Message.belongsTo(User);
Message.hasMany(Comment, {foreignKey: {name: 'message_id', allowNull: false,}});
Comment.belongsTo(Message);
User.hasMany(Comment, {foreignKey: {name: 'user_id', allowNull: false,}});
Comment.belongsTo(User);
module.exports = {User, Message, Comment}