Sequelize.js多次急切的加载
我有2个模型: User
和Team
有多种types的用户(在这种情况下是指导者和版主),它们使用User
模型()中的属性进行区分。 User
和Team
之间的关联如下:
User.hasMany(models.Team, {as: 'Mentors', through: models.TeamMentor, foreignKey: 'mentorId'}); User.hasMany(models.Team, {as: 'Moderators', through: models.TeamModerator, foreignKey: 'moderatorId'}); Team.hasMany(models.User, {through: models.TeamMentor, foreignKey: 'teamId'}); Team.hasMany(models.User, {through: models.TeamModerator, foreignKey: 'teamId'});
现在,我正在尝试为所有分配给团队的导师和版主分配团队的细节以及单独的对象。 我从文档中了解了许多到许多关系的getter和setter,但是我不知道如何使用这个方法,因为这里有两种不同的关联:
- 团队 – 导师(用户)
- 团队 – 主持人(用户)
在这种情况下如何正确查询团队的详细信息?
PS: TeamMentor
和TeamModerator
是空模型来帮助多人连接
我假设你有所有这些模型之间的N:M关系? 喜欢这个:
User ---mentors many---> Teams User --moderates many--> Teams Team --is moderated by many--> Users Team --is mentored by many---> Users
如果是这样的话,你可能不仅想在你已经拥有的User.hasMany(Team)
中使用as
选项,而且还要在Team.hasMany(User)
:
Team.hasMany(models.User, {as: 'mentors', through: models.TeamMentor, foreignKey: 'teamId'}); Team.hasMany(models.User, {as: 'moderators', through: models.TeamModerator, foreignKey: 'teamId'});
我想你可以在查询期间加载一些或全部的数据,例如:
Team.findAll({ where: {...}, include: [ {model: User, as: `moderators` }, {model: User, as: `mentors` } // or just use this to include everything: // include: [{all:true}] ] }).then(function(teams) { console.log(JSON.stringify(teams)); // oneTeam.moderators: [array of User] // oneTeam.mentors: [array of User] });
(注意:我认为你的用户对象目前有一个'getMentors()'方法和一个'导师'的属性,这是一个团队的数组。相同的'版主'属性也许重命名为'mentoredTeams' moderatedTeams'会使它更清晰?)