2016-08-04 148 views
0

我第一个询问从哪里获得这样看对象的列表:JS sequelize嵌套查询/遍历结果

{ 
    id 
    idmarker 
    idcategory 
} 

MarkerCategories.findAll({where: {idmarker: data.dataValues.id}}) 

这将让我一个结果与属于所提供的标记ID的categoryIds。 我如何保存结果集的id属性到一个数组命名的ID,这样我可以运行下面的查询来获取实际的类别说明:

Categories.findAll({where: {id: { $in: ids}}}); 

回答

0

如果您已经CategoriesMarkers模型之间定义的关联,你可以做到以下几点:

Markers.findAll({where: { id: markerId }, include: [ Categories ]}) 

,将返回一个标记与相关分类

+0

我不是100%确定如何设置我目前的表结构的关联: '标记{ID,名称} 类别{ID,名称} markers_categories {ID,idmarker,idcategory} ' 不过,我发现在这段时间里以下解决方案: '返回MarkerCategories.findAll({其中: {idmarker:data.dataValues.id}})。then(function(data)var ids = new Array(); data.map(item => ids.push(item.dataValues.idcategory)); return Categories.findAll({where:{id:{$ in:ids}}}); }); ' – Chris

+0

您的解决方案可以工作,但这是一种错误的方式:它会执行2个查询;代码的大小;正确的方法是定义关联和使用包含作为上面的代码。你的关联看起来像这样:'Markers.belongsToMany(Categories,{through:MarkerCategories,foreignKey:idmarker,otherKey:idcategory});'。欲了解更多信息,请参阅文档http://docs.sequelizejs.com/en/latest/docs/associations/#belongs-to-many-associations –