sequelize.js - 嵌套包含不提供结果

标签 sequelize.js

我有三个关联模型,Product、CatalogMembership、Catalog 与这些关联

Product.hasMany(CatalogMembership, { foreignKey: 'product_id' });
CatalogMembership.hasOne(Catalog, { targetKey: 'catalog_id', foreignKey: 'id' });

当我执行此嵌套查询时
let products = await Product.findAll({
      where: {...},
      include: {
        model: CatalogMembership,
        where: { catalog_id: { [Op.in]: catalogIds } },
        include: {
          model: Catalog,
          attributes: ['name', 'id'],
        },
      },
    });

包括 CatalogMemberships,但目录为空:
console.log(products[0]) // -->
/*
{
  id: 1,
  catalog_memberships: [
    { id: 23,
      catalog_id: 15,
      catalog: null,
      ...
    },
    {
      id: 24,
      catalog_id: 16,
      catalog: null,
      ...
    }
  ],
  ...
}
*/

而且我确定有目录CatalogMembership.catalog_id === Catalog.id
我希望目录属性不会为空,而是类似于
{
  id: 15,
  name: 'MyCatalog'
}

最佳答案

hasOne Relation 中没有 targetKey 。有 foreignKey (目标表中的外键属性名称)和 sourceKey to(用作源表中关联键的属性名称),默认情况下是源表的主键.

所以像这样使用,

CatalogMembership.hasOne(Catalog, { foreignKey: 'catalog_id', sourceKey: 'id' });

关于sequelize.js - 嵌套包含不提供结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56040320/

相关文章:

node.js - Sequelize 模型中无法识别的数据类型

node.js - Node (内存泄漏,v8 快照)- 使用连接 promise 是不好的做法吗?

node.js - 在 Github 操作中获取错误 : connect ECONNREFUSED 127. 0.0.1:5432

node.js - 用户如何使用 sequelize postgres nodejs 互相喜欢发帖?

mysql - 如何使用 Sequelize 添加外键和级联属性?

mysql - Apollo 服务器订阅不起作用

sequelize.js - 复杂的销毁查询

node.js - 当我更改 fieldName 并包含它时,Sequelize 会进行错误的查询

node.js - 从 Sequelize 中的 Promise 内部中断 for 循环

node.js - 使用sequelize 包含列的where 子句