Sails.js (v0.10.5) ve Waterline ORM konusunda yeniyim. Ben veritabanında 3 tablo var: kullanıcılar (id, isim), roller (id, alias) ve tablo user_roles (user_id, role_id) birleştirme. Tablo isimlerini ve alan adlarını veritabanında değiştirmemek önemlidir. Politika varlığının Kullanıcı ve Rol arasındaki bir katılım varlığı olmasını istiyorum. İşte bazı haritalama kodudur:Sails.js + Waterline: İlişkilendirmeden çok kişilere
//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'
}
}
}
Ama erişmeye çalışırken rolleri denetleyicisi içinde bağladıkları
User.findOne({id: 1}).populate('roles').exec(function(err, user) {
console.log(JSON.stringify(user.roles));
});
bu döndürür
[]
Ve
User.findOne({id: 1}).populate('roles').exec(function(err, user) {
console.log(JSON.stringify(user));
});
döner
{"id":1,"name":"test", "roles":[]}
İki kez, kullanıcı aralarında rol ve ilişkilerinin veritabanında bulunduğunu kontrol ettim. Benim hatam nedir
sen Can lütfen kodu geçmiş misiniz? User.find() doldurduğunuzdan emin olun ('roller'). Exec (işlev() {}) –
@ mandeep_m91 Cevabınız için teşekkür ederiz! Soruyu düzenledim (console.log çıktısında bazı hatalar vardı). –
Bunu çözebildiniz mi? Eğer değilse, hangi db kullanıyorsunuz? –