Я в настоящее время строю макет базы данных с Sequelize как мой ORM. У меня есть макет модели, состоящий из пользователя и модели приложения. Пользователь может принадлежать многим приложениям (то есть иметь доступ к ним) через таблицу AppUsers. Приложение принадлежит пользователю.Eagerly load result of ownToMany association in Sequelize
Я реализовал это в модели App как этот
classMethods: {
associate: function (models) {
App.belongsTo(models.User, {
foreignKey: 'id',
constraints: false,
as: 'owner'
});
App.belongsToMany(models.User, {
through: {
model: models.AppUser,
unique: true
},
foreignKey: 'app_id',
otherKey: 'user_id',
constraints: false
});
}
}
и в модели пользователя, как этот
classMethods: {
associate: function (models) {
User.belongsToMany(models.App, {
through: {
model: models.AppUser,
unique: true
},
foreignKey: 'user_id',
otherKey: 'app_id',
constraints: false,
as: 'apps'
});
User.hasMany(models.App, {
foreignKey: 'owner_id',
constraints: false,
scope: {
owner_type: 'user'
},
as: 'ownApps'
});
}
}
Сейчас на мой актуальный вопрос: Я ищу путь к запросить приложения, к которым у пользователя есть доступ (то есть user.getApps()
), и иметь информацию о владельце, которая с нетерпением загружена и уже включена в ответ на этот запрос.
Я играл с include:
и scope:
в ассоциации User.belongsToMany(models.App, …
, но ни один из них не дал желаемого результата. Есть ли способ сделать это или мне нужно написать пользовательский запрос App.findAll()
? Благодаря!