#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