首页 > 解决方案 > 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 表中插入新标签而不会引发外键错误。任何帮助,将不胜感激。

谢谢,
丹尼

标签: mysqlnode.jssequelize.jsassociations

解决方案


如果有人用同样的问题偶然发现了这个答案,我想通了:

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'});

解决问题。


推荐阅读