Jestem nowy w Sails.js (v0.10.5) i w linii wodnej ORM. Mam 3 tabele w bazie danych: users (id, name), role (id, alias) i join users_roles (user_id, role_id). Ważne jest, aby nie zmieniać nazw tabel i nazw pól w bazie danych. Chcę, aby obiekt strategii był łącznikiem między użytkownikiem a rolą. Oto kod mapowania:Sails.js + Waterline: Many-to-Many poprzez asocjację
//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'
}
}
}
Ale kiedy próbuje uzyskać dostęp do ról atribute kontroler
User.findOne({id: 1}).populate('roles').exec(function(err, user) {
console.log(JSON.stringify(user.roles));
});
ta zwraca
[]
I
User.findOne({id: 1}).populate('roles').exec(function(err, user) {
console.log(JSON.stringify(user));
});
powraca
Sprawdziłem dwa razy, że użytkownik, rola i powiązanie między nimi istnieje w bazie danych. Jaki jest mój błąd?
Czy ty proszę podać kod? Upewnij się, że robisz User.find(). Zapełnij ("role"). Exec (function() {}) –
@ mandeep_m91 dziękuję za odpowiedź! Edytowałem pytanie (były pewne błędy w wynikach konsoli .log). –
Czy byłeś w stanie rozwiązać ten problem? Jeśli nie, które z bazowych db używasz? –