Sono nuovo su Sails.js (v0.10.5) e Waterline ORM. Ho 3 tabelle nel database: utenti (id, nome), ruoli (id, alias) e join table users_roles (user_id, role_id). È importante non modificare i nomi delle tabelle e i nomi dei campi nel database. Voglio che l'entità politica sia un'entità di join tra Utente e Ruolo. Ecco alcuni codice di mappatura:Sails.js + Waterline: Many-to-Many tramite associazione
//User.js
module.exports = {
tableName: 'users',
autoCreatedAt: false,
autoUpdatedAt: false,
attributes: {
id: {
type: 'integer',
required: true
},
name: {
type: 'string'
},
roles: {
collection: 'role',
via: 'users',
through: 'policy'
},
}
}
//Role.js
module.exports = {
tableName: "roles",
autoCreatedAt: false,
autoUpdatedAt: false,
attributes: {
id: {
type: 'integer',
required: true
},
alias: {
type: 'string',
required: true
},
users: {
collection: 'user',
via: 'roles',
through: 'policy'
}
}
}
//Policy.js
module.exports = {
tableName: "users_roles",
tables: ['users', 'roles'],
junctionTable: true,
autoCreatedAt: false,
autoUpdatedAt: false,
attributes: {
user: {
columnName: 'user',
type: 'integer',
foreignKey: true,
references: 'user',
on: 'id',
via: 'role',
groupBy: 'user'
},
roles: {
columnName: 'role',
type: 'integer',
foreignKey: true,
references: 'role',
on: 'id',
via: 'user',
groupBy: 'role'
}
}
}
Ma quando si tenta di accedere ruoli atribute controller
User.findOne({id: 1}).populate('roles').exec(function(err, user) {
console.log(JSON.stringify(user.roles));
});
questo restituisce
[]
E
User.findOne({id: 1}).populate('roles').exec(function(err, user) {
console.log(JSON.stringify(user));
});
rendimenti
{"id":1,"name":"test", "roles":[]}
Ho controllato due volte che l'utente, il ruolo e l'associazione tra loro esiste nel database. Qual è il mio errore?
Can voi per favore, oltre il codice? Assicurati di utilizzare User.find(). Populate ('roles'). Exec (function() {}) –
@ mandeep_m91 grazie per la tua risposta! Ho modificato la domanda (c'erano alcuni errori nell'output di console.log). –
Sei riuscito a risolvere questo? In caso contrario, quale db sottostante stai usando? –