mysql - Sequelize 和 MySQL 关联
问题描述
我正在使用 Sequelize、MySQL 和 NodeJS。我正在尝试关联 3 个表,其布局如下:
products
product_id
name
description
product_tags
product_id
tag_id
tag_names
tag_id
tag_name
我想将产品与标签表相关联,然后从那里将标签名称与 tag_id 相关联。如下所示:
SELECT
name,
a.product_id,
group_concat(b.tag_id) as tags,
group_concat(tag_name) as tagName
FROM products a
JOIN product_tags b on b.product_id = a.product_id
JOIN tag_names c on c.tag_id = b.tag_id
WHERE name
然后它将返回产品名称、标签等。
我只是在努力理解它是如何与 hasMany、belongsTo 等相关的。我当前的代码是:
db.products.hasMany(db.product_tags, {foreignKey: 'product_id'});
db.product_tags.belongsTo(db.products, {foreignKey: 'product_id'});
db.product_tags.hasMany(db.tag_names, {foreignKey: 'tag_id'});
db.tag_names.belongsTo(db.product_tags, {foreignKey: 'tag_id'});
这似乎返回了正确布局的表,但我无法在 tag_name 表中插入新标签而不会引发外键错误。任何帮助,将不胜感激。
谢谢,
丹尼
解决方案
如果有人用同样的问题偶然发现了这个答案,我想通了:
db.products.belongsToMany(db.tag_names, { through: 'product_tags', as: "tags", foreignKey: 'product_id'});
db.tag_names.belongsToMany(db.products, {through: 'product_tags', as: "products", foreignKey: 'tag_id'});
解决问题。
推荐阅读
- r - 使用collapse_row和kable时如何解决pdf文档中长表的对齐/显示问题?
- python - 如何使用 python 从我的 CSV 中捕获打印数据
- python - 使用 psycopg2 和 pandas 处理错误查询产生的错误
- android - 如果从不可暂停的块中调用,Android 协程范围会丢失
- php - 使用查询mysql php插入多个数据
- python - 尝试将数据从excel文件导入RDS MySQL表,插入时间过长
- c# - .Net Core Azure AD Cloud 如何获取登录用户并访问他们的 Azure AD 安全组以确定他们是否在一个组中
- spring - 当我注销并尝试转到学生/列表时,Bean 属性“principal.username”不可读或具有无效的 getter 方法
- logstash - 如何编写弹性聚合以在 grafana 上绘制 VM 的 CPU 百分比使用情况?
- javascript - 随机显示 webms