内部联接为空时如何更新res?

时间:2019-03-27 19:29:59

标签: sequelize.js

我正在从数据库中捕获一个特定的问题,并且正在做一个左外部联接,以便也在结果中包括该问题的选项(可能的答案)。

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',

有没有办法强制更新该空数组?

2 个答案:

答案 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

之后