我搜索了sequelize的官方文档,找不到关于“separate
”的任何条目。https://readthedocs.org/search/?q=separate
我也在谷歌搜索但是徒劳无功。
db.fooTable.find({
where: {
id: id
},
include: [{
model: db.barTable1,
separate: true
}, {
model: db.barTable2,
separate: true
}, {
model: db.barTable3,
separate: true
}]
})
要了解其含义,我将“separate
”设置为false,但查询结果与我放置“true
”的结果相同。
答案 0 :(得分:8)
我在current code:
中找到了这个如果为true,则运行单独的查询以获取关联的实例,仅支持hasMany关联
详细说明:默认情况下,要检索相关的模型实例,Sequelize将使用SQL JOIN。通过启用separate
,Sequelize将为每个关联模型执行单独的查询,并将结果文档连接到代码中(而不是让数据库执行连接)。
假设我的Product
模型与hasMany
模型有Tag
关联(“产品可以有许多与之关联的标记”)。< / p>
这是“常规”查询:
SELECT
`product`.`id`,
`product`.`title`,
`tags`.`id` AS `tags.id`,
`tags`.`name` AS `tags.name`,
`tags`.`productId` AS `tags.productId`
FROM `products` AS `product`
LEFT OUTER JOIN `tags` AS `tags`
ON
`product`.`id` = `tags`.`productId`;
以下是separate : true
个查询:
SELECT
`product`.`id`,
`product`.`title`
FROM `products` AS `product`;
SELECT
`id`,
`name`,
`productId`
FROM `tags` AS `tag`
WHERE
`tag`.`productId` IN (1);
答案 1 :(得分:0)
@robertklep响应的补充:
您现在知道,它分隔了一个否则联接的查询。
这意味着在某些情况下,如果您具有许多联接和嵌套联接(在某些情况下可能会产生巨大影响),它将更有表现。嵌套联接使Sequelize在单个大查询中比在运行多个小查询上花费更多的时间。指出此问题为重复数据删除操作: