Javascript Sequelize-多对多-获取至少有一个关系的对象的所有关系

Javascript Sequelize-多对多-获取至少有一个关系的对象的所有关系,javascript,node.js,sequelize.js,Javascript,Node.js,Sequelize.js,我有两个模型:品牌和类别,它们是通过多对多关系联系在一起的。类别对于品牌是可选的 我想创建一个“类别”过滤器,为此,我需要获得所有已过滤类别的品牌,但仍然需要获得与该品牌链接的所有类别 以下是我所拥有的: Brand.findAll({ attributes: ['id'], include: [ { model: Category, as: 'categories', attributes:

我有两个模型:品牌和类别,它们是通过多对多关系联系在一起的。类别对于品牌是可选的

我想创建一个“类别”过滤器,为此,我需要获得所有已过滤类别的品牌,但仍然需要获得与该品牌链接的所有类别

以下是我所拥有的:

Brand.findAll({
    attributes: ['id'],
    include: [
        {
            model: Category,
            as: 'categories',
            attributes: ['id'],
            where: {},
            through: {where:{id:1}},
        },
    ],
    order : [['name','ASC']],
    offset: offset,
    limit: limit,
})
下面是它生成的MySQL:

SELECT brand.id,
FROM (
    SELECT brand.id  
    FROM brands AS brand 
    WHERE ( 
        SELECT brandCategory.brandId 
            FROM brandCategories AS brandCategory 
            INNER JOIN categories AS category ON brandCategory.categoryId = category.id 
            WHERE (
                brand.id = brandCategory.brandId AND brandCategory.id = 1
            ) LIMIT 1 
    ) IS NOT NULL 
    ORDER BY brand.name ASC 
    LIMIT 0, 20
)
AS brand 
INNER JOIN (
    brandCategories AS categories.brandCategory 
    INNER JOIN categories AS categories ON categories.id = categories.brandCategory.categoryId AND categories.brandCategory.id = 1
) ON brand.id = categories.brandCategory.brandId 
include的where对象使它成为必需的,所以我有一个检查类别是否存在的请求。但是,由于它也位于末尾的内部联接中,因此它不会得到所有类别,而只得到一个已过滤的类别

如果我直接在include中使用
where:{id:1}
,而不是在“through”中,我不会得到所有链接的模型+分页不起作用,因为限制在只检查关系是否存在(但未链接到筛选的id)的请求内


我是否应该忘记include中的where和through参数,直接在findAll的根使用where中的文字表达式来替换检查关系是否存在的函数

在文档中,您认为传递到findAll方法的对象的键在哪里?我正在看这一页()。关于多对多连接,它这样说:“在多对多连接的情况下,您还可以通过表中的属性进行排序”。它给出的代码示例是Company.findAll({include:[{model:Division,include:[Department]}],order:[[Division,DepartmentDivision,'name']})在此处找到此::在下面,您有:选项。包括[]。到。where。但我认为订购并不能解决我的问题