2016-08-24 1 views
1

Я в настоящее время строю макет базы данных с 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()? Благодаря!

ответ

0

Оказывается, ответ довольно прост: Просто добавив include к соответствующей модели функции сделал трюк:

user.getApps({ include: [{ model: models.User, as: 'owner' }] }) 
Смежные вопросы