当前位置: 首页 > 知识库问答 >
问题:

如何在NodeJS中使用Sequelize在表模型中应用外键?

傅阿苏
2023-03-14

我正在学习如何在NodeJs中使用Sequelize来访问MySQL数据库,但是在创建模型的时候,我被外键问题困住了。有谁能建议我如何申请吗?因为我试过一个,但还是出错了。

模型

exam_category.js

const Sequelize = require('sequelize');
const sequelize = require('../../database');

const ExamCategory = sequelize.define('exam_category', {
    id:{ type: Sequelize.BIGINT, autoIncrement: true, allowNull: false, primaryKey: true }, 
    exam_category_name: { type: Sequelize.STRING, allowNull: false },
    isActive: { type: Sequelize.BOOLEAN, allowNull: false },
    createdBy: { type: Sequelize.STRING, allowNull: true },
    createdAt: { type: Sequelize.DATE, allowNull: false }
}, { timestamps: false });

module.exports = ExamCategory;

exam.js

const Sequelize = require('sequelize');
const sequelize = require('../../database');

const Exam = sequelize.define('exam', { 
    id:{ type: Sequelize.BIGINT, autoIncrement: true, allowNull: false, primaryKey: true }, 
    startDate: { type: Sequelize.STRING, allowNull: false }, 
    endDate: { type: Sequelize.STRING, allowNull: false },
    startTime: { type: Sequelize.STRING, allowNull: false }, 
    endTime: { type: Sequelize.STRING, allowNull: false },
    examDuration: { type: Sequelize.INTEGER, allowNull: false },
    examName: { type: Sequelize.STRING, allowNull: false },
    examKey: { type: Sequelize.STRING, allowNull: false, unique: true },
    exam_category_id: { type: Sequelize.BIGINT, allowNull: false, references: 'exam_category', referencesKey: 'id' },
    isActive: { type: Sequelize.BOOLEAN, allowNull: false },
    createdBy: { type: Sequelize.STRING, allowNull: true },
    createdAt: { type: Sequelize.DATE, allowNull: false }
}, { timestamps: false });

module.exports = Exam;

然后在app.js中我写了这样一个:

const sequelize = require('./database');
const adminUser = require('./models/users/admin_user');
const examCategory = require('./models/users/exam_category');
const exam = require('./models/users/exam');
examCategory.ExamCategory.hasMany(exam.Exam, {
    foreignKey: 'exam_id',
    sourceKey: 'id'
});
exam.Exam.belongsTo( examCategory.ExamCategory, {
    foreignKey: 'exam_id',
    targetKey: 'id'
});
sequelize.sync();
sequelize.sync({ force: true });

这是我的database.js。

const Sequelize = require('sequelize');
const examCategory = require('./exam_category');

const db = new Sequelize(
    'otp_node', 'root', 'root',
    {
        dialect: 'mysql',
        host: 'localhost'
    }
);
module.exports = db;

错误

PS D:PracticeOtpFrontend&>;node.server.js internal/modules/cjs/loader.js:968抛出错误;^

错误:找不到模块'./exam_category'所需堆栈:

    在module._compile(internal/modules/cjs/loader.js:113730)在object.module._extensions.js(internal/modules/cjs/loader.js:1157:10)在module.load(internal/modules/cjs/loader.js:985:32)在function.module._load(internal/modules/cjs/loader.js:878:14)在

作为参考,这是我的Github回购代码。有人能帮我这个吗?

共有1个答案

吕天逸
2023-03-14

您可以尝试在表中添加外键

const sequelize = require('./database');
const adminUser = require('./models/users/admin_user');
const ExamCategory = require('./models/users/exam_category');
const Exam = require('./models/users/exam');
ExamCategory.hasMany(exam, {
    foreignKey: 'exam_id',
    sourceKey: 'id'
});
Exam.belongsTo( examCategory, {
    foreignKey: 'exam_id',
    targetKey: 'id'
});
sequelize.sync();
sequelize.sync({ force: true });  

在关联表的文件中添加上面的代码,它将在表中添加foreign_key作为名称exam_id,您可以给它取任意名称

您可以在此单据中了解更多的foreignKey和表间关系

检查这个存储库,以便您了解如何使用sequelize以及节点sequelize的样板

 类似资料:
  • 我在Nodejs/Express、Sequelize和jwt应用程序方面有一些经验。最近我开始研究API设计工具/规范,例如RAML--API Designer、Swagger--Swagger Tools 我想知道,我发现没有文章链接或指出我如何使用swagger来创建/设计API,然后在我的nodejs /express应用程序中使用它,该应用程序使用Sequelize作为ORM。 JWT功能

  • 问题内容: 使用Sequelize ORM for Node.js,如何在select语句中使用CASE / WHEN表达式? 根据Sequelize文档,我看不到任何参考或示例来使用SQL表达式CASE。这可能吗? 这是我的示例: 的SQL 续集 数据库结构 预期结果: 问题答案: 您可以使用Sequelize.literal在建立特殊查询

  • 问题内容: 我已经搜索了很长时间才能使该功能正常工作。 我想要知道的是如何在zend db模型中使用’distinct’,以使我对用户关注者的选择唯一。 我的数据库模型用于为用户计算关注者(在这里,我需要添加’distinct’) 编辑:此函数是’类Application_Model_DbTable_Followers扩展Zend_Db_Table_Abstract’的一部分 我的表结构 ID a

  • 我想做一个图像分类器,但是我不懂Python。js与我熟悉的javascript一起工作。模型可以用它来训练吗?这样做的步骤是什么?坦白地说,我不知道从哪里开始。 ========================================= 说我有一堆图像和标签。我如何使用它们来训练一个模型?

  • 问题内容: 我为2个不同的数据库提供了2个模型: 数据库是手动创建的,但是它什么也不会改变。 在以下代码之后,将引发错误 为什么不能将外键和模型用于不同的数据库? 问题答案: 跨数据库限制 Django当前不支持跨多个数据库的外键或多对多关系。如果使用路由器将模型分区到不同的数据库,则这些模型定义的任何外键和多对多关系必须在单个数据库内部。 Django-多个数据库的局限性 Trouble 同样的

  • 我对如何在AOP中使用Fegn客户端很感兴趣。例如: 应用程序编程接口: 配置: 但我不知道如何“拦截”api方法调用。我哪里出错了? 更新: 我的Spring课注解: