Sequelize and MySQL associations



我正在使用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'});

解决问题

最新更新