我不能把“续集”分开:true”选项来处理嵌套的include语句。对于我的代码片段,我将删除大部分代码,并显示一个小例子,说明在我的大型查询中出现了什么问题。
背景:患者有许多场景,患者有许多特征。
使用不起作用的嵌套包含:
const scenario = await Scenario.findByPk(scenario_id, {
include: [{
model: Patient,
attributes: [ 'name' ],
required: true,
include: [{
model: Characteristic,
separate: true,
}]
}]
});
不嵌套include(工作并使用相同的表关联):
const scenario = await Patient.findByPk(1, {
include: [{
model: Characteristic,
separate: true,
}]
});
导致问题的mysql查询部分如下:
Executing (default): SELECT `characteristic_id`, `type`, `value`, `patient_id` FROM `Characteristic` AS `Characteristic` WHERE `Characteristic`.`patient_id` IN (NULL);
如您所见,当嵌套include语句时,它将patient_id与null进行比较。这对我来说一点意义都没有。
我做错什么了吗?“单独”调用不应该嵌套吗?如果是这样的话,做大型查询的最佳方法是什么,没有单独的sequelize会生成一个非常复杂的list子查询inner joins,这会导致查询1100行json需要13秒。
1条答案
按热度按时间bpzcxfmw1#
我的问题是属性选项。如果你有一个属性数组只拉取某些列,并且你没有像这样在属性数组中包括父对象的主键:
则它将使用空外键搜索子对象并将返回空数组。