设置多对多关系,但仅在存在时创建

时间:2018-10-30 21:19:36

标签: javascript mysql sequelize.js

目标:

针对Product创建一个标签系统

型号:

  • Products
  • Hashtags
  • ProductTags(联接表)

我在做什么

当我创建新产品时,会发生以下情况:

  1. 产品已创建
  2. 标签已创建
  3. ProductTag连接已创建

data看起来像这样:

{
  "category_id":2,
  "description":"Some description",
  "price": 45,
  "currency_id": "GBP",
  "hashtags":[
    {"tag":"tagnumber1"}, 
    {"tag":"tagnumber2"}, 
    {"tag":"tagnumber3"}
  ]
}

Product.create代码如下:

models.Product.create(data, {
      include: [
        {
          model: models.Hashtag,
          as: "hashtags",
          attributes: models.Hashtag.fields
        }
      ]
    });

问题

当我第一次创建具有以下标签的产品:tagnumber1tagnumber2tagnumber3。它将这些添加到Hashtag表中,并在ProductTag表中创建关系。

但是当我创建另一个具有相同标签的产品时:tagnumber1tagnumber2tagnumber3。仍会将这些相同的标签添加到Hashtag表中。

如何?

是否可以在第二个添加项中将INSERT保留到ProductTags中,而不是在Hashtag中复制标签以抢占ids(如果它们匹配)?

Tables

0 个答案:

没有答案