Как обновить res, когда внутреннее соединение равно нулю?

#sequelize.js

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

Нет ли способа принудительно обновить этот пустой массив?

Ответ №1:

Хорошо, я не знаю, правильный ли это подход, но я создал виртуальный тип данных в своей модели следующим образом:

 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 результат. Не уверен, как справиться с этим, когда возвращается несколько вопросов.

Ответ №2:

Я бы подумал, что самым простым способом было бы сделать

 .then(result => {
  if(result.length === 0){
   result[0] = //whatever you want it to be here
  }
}
  

после вашего Question.findAll