We have Smart Fields that use attributes from associated tables in their “get” function.
Before upgrading to v6 (node), all attributes were accessible.
Actual behavior
Now it seems only the field used for reference for display is defined.
i.e. on the “users” list view, we have a field that returns ${user.address.street}, ${user.address.city}.
‘city’ is still defined, i guess it’s because it’s the field selected as “Reference field”, but all other fields from “user.address” are not defined anymore.
We have multiple fields like this so adding an extra db request would have a big performance impact.
Is there something we can do to make those fields directly accessible ?
Hi @kmcb yeah we have removed unused field from the request for performance issue.
To bypass this you can add a beforeFind hook inside your Sequelize user model like this:
hooks: {
beforeFind: (options) => {
// the code below select for all included models all the attributes
// you can probably do something more efficient
options.include.forEach(model => {
delete model.attributes;
});
}
}
It worked, however i had to check if options.include is defined, this hook is called with undefined include when updating a user on the ui.
I ended up with something like this :
if (options.include) {
options.include.forEach(model => {
if (model.as === 'contract') {
model.attributes = [ 'id', ...otherAttributes ]
}
...