我有三个关联模型,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/