Sequelize models - 在 Node 中同步时设置关联

Posted

技术标签:

【中文标题】Sequelize models - 在 Node 中同步时设置关联【英文标题】:Sequelize models - Setting associations when syncing in Node 【发布时间】:2021-04-15 19:08:20 【问题描述】:

我正在尝试正确设置我的关联,以便当我在 Postman 中发出 GET 请求时它们可以获取外键值。出于某种原因,当我尝试同步它们时,在 Pgadmin4 的末尾创建了一个新列,而不是在开始时与主列值匹配。

我知道 Sequelize 旨在选择正确的字段进行匹配,但它似乎总是为正在匹配的表选择错误的字段。当它们在我的服务器文件中初始化时,有没有一种方法可以更具体?我以前使用过 phpmyAdmin 并且没有任何麻烦,但这没有 ORM。

我知道 Sequelize 文档中的急切加载,这就是我设法从它们中整理出来的。我是否总是需要在我的服务器文件和模型中有关联?或者我可以只有一个吗?我已经构建了我的表,通过正确初始化服务器文件中的值上传了我的主要数据,但是我永远无法加载外键字段,并且我的请求中从未返回包含语句。

我有没有办法在两个表上指定列名,以便在初始同步时正确设置关联?此刻我遇到了一个问题,是否正在使用连接的外键名称的生成名称创建列。

我是否应该在每个表中创建一个索引列,以便创建这个额外的列以匹配其他表?我不知道如何自动递增每个条目以匹配主条目键(当我尝试在 pgAdmin 中设置外键时不允许外键)。

【问题讨论】:

【参考方案1】:

终于整理好了。最好的方法是用不同的数字为每个“as”键编号,这样当您进行 findAll include 调用时,您可以立即识别问题。我可能做了一些额外的工作,但它会产生与我的外键值相关的额外字段数据。

exports.adminUserList = (req, res) => 
    console.log("usegfu")
    users.findAll(
        include: [
            model: diveLog, as: 'userID_FK1',
        , 
            model: userRole, as: 'userRoleID_FK1',
        , 
            model: article, as: 'userID_FK3',
        , 
            model: posts, as: 'userID_FK7',
        , 
            model: photos, as: 'userID_FK5',
        ],
    )
        .then((users) => 

server.js - 匹配表模型的关联

diveLog.belongsTo(userLogin,  foreignKey: "userID", as: 'userID_FK', constraints: true, onDelete: 'cascade');
userLogin.hasMany(diveLog,  foreignKey: "userID", as: 'userID_FK1',constraints: true, onDelete: 'cascade');

article.belongsTo(userLogin,  foreignKey: "userID", as: 'userID_FK2',constraints: true, onDelete: 'cascade');
userLogin.hasMany(article,  foreignKey: "userID", as: 'userID_FK3',constraints: true, onDelete: 'cascade');

photos.belongsTo(userLogin,  foreignKey: "userID", as: 'userID_FK4',constraints: true, onDelete: 'cascade')
userLogin.hasMany(photos,  foreignKey: "userID", as: 'userID_FK5',constraints: true, onDelete: 'cascade');

posts.belongsTo(userLogin,  foreignKey: "userID", as: 'userID_FK6',constraints: true, onDelete: 'cascade');
userLogin.hasMany(posts,  foreignKey: "userID", as: 'userID_FK7',constraints: true, onDelete: 'cascade');

【讨论】:

以上是关于Sequelize models - 在 Node 中同步时设置关联的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Node.JS 中向 sequelize.js 添加自定义函数?

使用 Node 和 sequelize 关联对象的 Where 子句

Node.js学习10~Sequelize基本sql学习

Sequelize sync() 不会创建所有的表模型

Node Js sequelize如何获取最后一个插入id

如何在 Sequelize 现有模型中添加列?