javascript - 如何使用 Sequelize.js 将数据插入到桥接/映射表中
问题描述
我正在尝试使用 sequelize.js 将数据插入到桥接/映射表中
我将文章定义为-
const Articles = db.define('article', {
"slug": {
type: Sequelize.STRING,
primaryKey: true,
allowNull:false
},
"title": {
type: Sequelize.STRING(50),
allowNull: false
},
"description": {
type: Sequelize.STRING(100),
},
"body": Sequelize.STRING,
})
并标记为-
const Tags = db.define('tag', {
name: {
type: Sequelize.STRING,
primaryKey: true
}
})
我在它们之间创建了一个多对多的关联
Articles.belongsToMany(Tags, {through:'article_tags'})
Tags.belongsToMany(Articles, {through:'article_tags'})
这在我的数据库中创建了一个表 article_tags 以及文章和标签。但是现在如何使用 sequelize 将数据插入到这个 article_tags 桥接表中?
解决方案
您还必须对该映射表进行建模....然后,当您在解析器中说出“tagArticle”之类的内容时,您只需使用文章的 ID 和标签的 ID 调用映射表上的 create 函数...这是我将经销商加入帐户的连接表的解析器示例
createUserAccountDealer: async (_, args, { models }) => {
let returnValue = null;
const { username, input } = args;
try {
returnValue = await models.ProfileDealerInfo.create(input);
if (returnValue && returnValue.dataValues.id) {
const tempJoin = { username, dealer_id: returnValue.dataValues.id };
await models.ProfileAccountDealer.create(tempJoin);
}
} catch (err) {
logger.error(err);
}
return returnValue;
}
对我而言,不同之处在于经销商是帐户的孩子,所以我在创建子经销商记录后立即进行加入记录...您的示例有点不同,其中标签和文章可能已经存在,您可能只是将它们关联起来这意味着 id 只会从客户端传递到 args 中,并且您不会有等待从子记录创建中取回 id 的额外步骤
推荐阅读
- ios - 为 iOS 模拟器构建,但在为 iOS 构建的目标文件中链接,用于架构 arm64 的文件“.../GoogleMaps”
- javascript - 使用向后兼容语法的词频
- laravel - Laravel - 超级管理员看不到其他角色
- excel-formula - MS Excel:每个帐户上个月和本月的期末余额的返回值
- python - matplotlib 3d:移动刻度的标签
- python - 计算一个列中的列表中返回 1 的元素的数量
- prolog - λProlog 假设推理井字游戏
- ruby-on-rails - 在 Docker 文件上安装 yarn global
- php - Laravel 8 视图不更新路由
- javascript - 计算数组内对象的迭代次数