2017-05-27 52 views
0

我有以下型号:SQL JOIN的第二个表与sequ​​elizejs

const User = sequelize.define('user', { 
    name: Sequelize.TEXT, 
    avatar: Sequelize.TEXT, 
}); 

const Event = sequelize.define('event', { 
    title: Sequelize.STRING, 
    description: Sequelize.TEXT, 
    timestamp: Sequelize.DATE, 
}); 

const EventUser = sequelize.define('event_user', {}); 

Event.hasMany(EventUser); 
EventUser.belongsTo(User); 

所以EventUser握住我的与会者名单特定事件。

我想查询所有事件,其中用户X正在参与:

let events = await Event.findAll({ 
    include: [ 
     {model: EventUser, include: [{model: User, where: {id: 1}}]} 
    ], 
}); 

但它不会获取其他参与该事件的列表。不知道如何实现这一点,谢谢!

回答

1

正确的方法是定义用户和事件

User.belongsToMany(Event, {through: 'EventUser'}); 
Event.belongsToMany(User, {through: 'EventUser'}); 

然后之间的许多一对多的关系,你可以得到一些用户的所有事件是这样的:

User.findById(userId).then(function(user){ 
    return user.getEvents(); 
}).then(function(events){ 
    //here's events 
}); 

,或者通过一个查询:

Event.findAll({ 
    include: [{ 
     model: User, 
     where: {id: userId} 
    }] 
}).then(function(events){ 
    //here's events 
}); 
+0

一个查询选项不起作用(它仅返回该用户作为参与者 - 不是所有参与者),但第一个选项工作很棒,谢谢! –