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。但我认为订购并不能解决我的问题