#mysql #orm #objection.js
#mysql #orm #objection.js
Вопрос:
У меня такой вопрос: как я могу указать, какие столбцы я хочу получить из базы данных с withGraphFetched
помощью метода, у меня есть BelongsToOneRelation
, и я хочу исключить некоторые столбцы, это моя модель:
module.exports = class ProveedorModel extends Model {
...
static relationMappings = {
empresa: {
relation: Model.BelongsToOneRelation,
modelClass: EmpresaModel,
join: {
from: 'proveedor.empresa_id',
to: 'empresa.id'
}
}
};
...
}
и в моем контроллере у меня есть это:
const payload = await ProveedorModel.query().withGraphFetched('empresa');
но в таблице empresa
много столбцов, которых я не буду, так как я могу фильтровать?
Ответ №1:
вы можете указать filter
свойство для своих отношений
class Person extends Model {
static relationMappings = {
pets: {
relation: Model.OneToManyRelation,
modelClass: Animal,
filter: query => query.select('id', 'ownerId', 'name'),
join: {
from: 'Person.id',
to: 'Animal.ownerId'
}
}
}
}
ссылка: https://github.com/Vincit/objection.js/issues/70#issuecomment-175143072
Просто интересно, почему objectionне запрашивает только столбцы, отображенные в tableMetadata
(https://vincit.github.io/objection.js/api/model/static-methods.html#static-tablemetadata ) при использовании withGraphFetched
, как это делается для withGraphJoined
В качестве альтернативы, вы можете сопоставить только те свойства, которые вы хотите, с помощью parsedatabasejson (https://vincit.github.io/objection.js/api/model/instance-methods.html#parsedatabasejson ) но ваш SQL-запрос принесет их все.