2017-05-27 66 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

一個查詢選項不起作用(它僅返回該用戶作爲參與者 - 不是所有參與者),但第一個選項工作很棒,謝謝! –