【问题标题】:How to check if a belongsToMany association exist in Sequelize如何检查 Sequelize 中是否存在 belongsToMany 关联
【发布时间】:2020-05-19 10:01:49
【问题描述】:

我在 sequelize 中有两个模型,它们的关联定义如下

Product.belongsToMany(models.Disease, {through: 'DiseaseProduct'});

这里sequelize自动创建DiseaseProduct表,有DiseaseIdProductId两列。

我已经多次查看documentation,但我似乎无法正确运行hasDisease 函数来检查某种疾病是否与产品相关(它总是返回false)。但是,我可以执行以下操作,并且运行正常。

var prod = await Product.findByPk(1);
prod.addDisease(1);

我想做的是检查疾病与下面这样的产品的关联

var prod = await Product.findByPk(1);
prod.addDisease(1); //this runs correctly
prod.hasDisease(1); //the promise should resolve to true

我尝试过的

prod.hasDiseases(1);
prod.hasDiseases([1]);

【问题讨论】:

  • prod.hasDisease(1) 它返回一个承诺,试试console.log(await prod.hasDisease(1))
  • 是的,我正在使用 await 与该功能,它仍然没有运行。我发现了这个问题。还是谢谢!

标签: node.js sequelize.js


【解决方案1】:

所以问题在于将字符串传递给prod.hasDisease() 函数。

当我通过如下所示的 express 请求变量将参数传递给该函数时

prod.hasDisease(req.body.diseaseId);

它总是返回 false,尽管同时 prod.addDisease(req.body.diseaseId) 运行没有问题并通过数据透视表关联疾病。

反正解决办法就是把字符串转成数字之类的

prod.hasDisease(Number(req.body.diseaseId));

不敢相信我在这上面浪费了 4 个小时!

【讨论】:

  • 在将参数传递给此函数之前,对您的请求正文数据进行适当的验证。它也可能导致 NaN ,这会给你带来意想不到的结果。
猜你喜欢
  • 2014-08-24
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-24
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多