我正在从数据库中捕获一个特定的问题,并且正在做一个左外部联接,以便也在结果中包括该问题的选项(可能的答案)。
Question.findAll({
where: { id: questionData.question_id, status: 1 },
include: [{
model: QuestionOption,
as: 'QuestionOptions',
attributes: ['id', 'text'],
required: false,
}]
})
现在,如果QuestionOptiosn中有结果,则将其包含在结果中。世间万事大吉。
"QuestionOptions": [
{
"id": 1,
"text": "42"
},
{
"id": 2,
"text": "43"
}
],
但是当没有找到选项并且我的QuestionOptions是[]时,我想在那里手动插入选项。
我尝试使用setDataValue,但似乎无法手动覆盖该空的QuestionsOptions数组。尝试setDataValue时,出现以下错误消息:
message: 'instance.get is not a function',
有没有办法强制更新该空数组?
答案 0 :(得分:0)
好吧,我不知道这是否是正确的方法,但是我在模型上创建了一个虚拟数据类型,如下所示:
var Model = sequelize.define('Question', {
...
options: {
type: DataTypes.VIRTUAL,
set: function(val) {
this.setDataValue('options', val);
}
}
}
在我的服务中,以及获得结果后,我会检查QuestionsOptions是否有任何结果。如果这样做,那么我将使用这些值更新选项。
question[0].setDataValue('options', question[0].QuestionOptions);
如果QuestionOptions为空,则使用以下默认值更新我的选项:
question[0].setDataValue('options', [{ text: "True" }, { text: "False" }]);
在我看来,我知道options
将始终具有应在应用程序中使用的选项值。
但这仅在我知道我只想要1个结果时才有用。当返回多个问题时,不确定如何处理。
答案 1 :(得分:0)
我认为最直接的方法是
.then(result => {
if(result.length === 0){
result[0] = //whatever you want it to be here
}
}
在Question.findAll