javascript - Sequelize 中的关联未按预期工作
问题描述
我试图在 Sequelize 中关联两个表,但我得到 SequelizeEagerLoadingError 一个表未与另一个表关联,尽管尝试了此平台上的所有可用修复。
我有两个表,用户和项目。
用户 (user.js)
const User = dbconnection.sequelize.define('users', {
id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true},
name: {
type: Sequelize.STRING(80),
allowNull: false
},
email: {
type: Sequelize.STRING(120),
allowNull: false,
unique: true
},
dob: {
type: Sequelize.DATEONLY,
allowNull: false
},
password: {
type: Sequelize.STRING(256),
allowNull: false
}
});
User.associate = models => {
User.hasMany(models.Item, { as: 'items',foreignKey: 'user_id' })
}
dbconnection.sequelize.sync({ force: false })
.then(() => {
//console.log('Table created!')
});
module.exports = {
User
};
项目(item.js)
const Item = dbconnection.sequelize.define('items', {
id: { type: Sequelize.INTEGER, unique: true, autoIncrement: true, primaryKey: true},
item: {
type: Sequelize.STRING(80),
allowNull: true
},
item_type: {
type: Sequelize.STRING(10),
allowNull: false
},
comment: {
type: Sequelize.STRING(1000),
allowNull: true
},
user_id: {
type: Sequelize.INTEGER,
allowNull: false,
references: { model: 'users', key: 'id' }
},
});
Item.associate = models => {
Item.belongsTo(models.User, { as: 'users',foreignKey: 'user_id' })
}
dbconnection.sequelize.sync({ force: false })
.then(() => {
// console.log('Table created!')
})
});
module.exports = {
Item
};
User hasMany(Item) 而 Item belongsTo(User) 如上所示。
但是,当我对 Item 表进行查询时(如下所示),
const usersdb = require('./userdb')
const itemsdb = require('./itemdb')
class ItemsController {
static async getAllItems(req, res, next) {
try{
let allitems = await itemsdb.Item.findAll({
include: [{
model: usersdb.User
}]
})
return {items: allitems, status: true}
}
catch (e) {
return {items: e, status: false}
}
}
}
module.exports = ItemsController;
我得到 SequelizeEagerLoadingError “用户未与项目关联!”
解决方案
我终于找到了解决方法。首先,我删除了表格并丢弃了模型定义。sequelize model:create --name ModelName --attributes columnName:columnType
其次,我使用命令生成了迁移和模型。然后我使用生成的模型来关联这两个表,就像我之前所做的那样。最后,我运行了sequelize db:migrate
创建表的命令,并在运行查询时,它工作了!
早些时候,我是手动创建模型的。sequelize.sync({force: false/true})
加载模型后,我还在使用命令创建表。
用户模型 (user.js)
'use strict';
module.exports = (sequelize, DataTypes) => {
const User = sequelize.define('User', {
email: {
type: DataTypes(120),
allowNull: false,
unique: true
},
dob: {
type: DataTypes.DATEONLY,
allowNull: false
},
password: {
type: DataTypes.STRING(256),
allowNull: false
}
}, {});
User.associate = function(models) {
User.hasMany(models.Item, {as: 'Item', foreignKey: 'user_id'})
};
return User;
};
项目模型 (item.js)
'use strict';
module.exports = (sequelize, DataTypes) => {
const Item = sequelize.define('Item', {
item: {
type: DataTypes.STRING(80),
allowNull: true
},
item_type: {
type: DataTypes.STRING(10),
allowNull: false
},
comment: {
type: DataTypes.STRING(1000),
allowNull: true
},
user_id: {
type: DataTypes.INTEGER,
allowNull: false,
references: { model: 'User', key: 'id' }
}
}, {});
Item.associate = function(models) {
Item.belongsTo(models.User, { as: 'User',foreignKey: 'user_id' })
};
return Item;
};
查询(queryitem.js)
const Item = require('../models').Item
const User = require('../models').User
class ItemsController {
static async getAllItems() {
try{
let allitems = await Item.findAll({
include: [{
model: User,
as: 'User'
}]
})
return {items: allitems, status: true}
}
catch (e) {
return {items: e, status: false}
}
}
}
module.exports = ItemsController;
推荐阅读
- mongodb - 尝试使用数据库和集合的 mongo 容器时出错
- java - Visualizer 被复制但不超过一次
- python - python list 和 python dataframe/series 中 sum() 函数的区别
- ssms - SSMS - 在“编辑”菜单中单击时不会弹出“在文件中查找”
- javascript - 仅在满足条件时才渲染组件,否则显示 0
- reactjs - 为什么我在 reactJS 中收到 Axios 400 bad request 错误
- acumatica - 如何将自定义操作添加到 Base.Actions 菜单?
- microsoft-graph-api - Microsoft Graph API - 使用 /users 端点不返回电子邮件字段
- node.js - Google Cloud Functions 中的 Node.js 10 JSON 语法错误:Unexpected token 。在 JSON.parse 的位置 0 的 JSON 中(
) - excel - 隐式交集运算符 @ 在具有结构化表引用的 Excel 公式中存在差异吗?