#sails.js #waterline
#sails.js #ватерлиния
Вопрос:
Когда мы используем запрос WaterlineORM .populate(), мы получаем все атрибуты заполненной ассоциации.
например:
User.find({name:'Finn'}).populate('dad').exec(function (err, usersNamedFinn){
if (err) {
return res.serverError(err);
}
return res.json(usersNamedFinn);
});
Ответ:
[
{
id: 7392,
age: 13,
name: 'Finn',
createdAt: Wed Dec 25 2003 18:00:00 GMT-0600 (CST),
updatedAt: Wed Feb 12 2016 18:06:50 GMT-0600 (CST),
dad: {
id: 108,
age: 47,
name: 'Joshua',
createdAt: Wed Dec 25 1969 00:00:00 GMT-0600 (CST),
updatedAt: Wed Jan 10 2015 12:00:00 GMT-0600 (CST),
dad: null
}
},
]
Мне нужно получить в ответе только имя и идентификатор заполненной ассоциации ‘dad’ (т. Е. Удалить Другие атрибуты dad из ответа)
Как я могу это сделать?
Ответ №1:
Подробная информация здесь https://github.com/balderdashy/waterline/issues/919
Похоже, что это было добавлено в версии 0.12.3
populate('relation', { select: ['wantedFields', ...] });
Комментарии:
1. Я использую v0.12.4, но он по-прежнему заполняет все поля, когда я использовал
populate('dad', { select: ['name', 'id'] });
2. У меня версия 0.12.4, и я попробовал это
populate('dad', { select: ['id', 'name'] });
, но это не имело никакого значения. Все еще заполняю все поля.3. @ShanikaEdiriweera Я вас слышу, однако решение, которое я предлагаю, должно работать в соответствии с командой sails. Вы должны сообщить об ошибке / проблеме на их странице github.
4. Я провел несколько тестов. В настоящее время он работает только с совокупностью отношений «один ко многим». Я сделал запрос на извлечение, чтобы решить проблему взаимно однозначного отношения: github.com/balderdashy/waterline/pull/1613
Ответ №2:
в вашей модели вы можете написать метод toJSON(), который будет манипулировать объектом:
toJSON() {
// getting the object...
let obj = this.toObject();
// removing some attributes...
delete obj.createdAt;
delete obj.updatedAt;
return obj;
}
а затем в контроллер после «заполненных» результатов запроса, которые вы можете сделать:
.exec(function(err, usersNamedFinn){
if(err){
return res.negotiate(err);
}
return res.json(usersNamedFinn);
});
Надеюсь, это может вам помочь