Ker*_*092 5 sequelize.js feathersjs feathers-sequelize
我通过sequelize一直在使用feathersjs/nodejs而不是postgres db.在我的数据库中,我有用户表和事件表.他们有两次关系:
events.belongsTo(models.users, {
foreignKey: {
name: 'creatorId',
allowNull: false
},
onDelete: 'CASCADE',
as: 'creator'
});
events.belongsToMany(models.users, {
through: 'event_participants',
as: 'participants',
foreignKey: 'eventId',
otherKey: 'userId'
});
models.users.belongsToMany(events, {
through: 'event_participants',
as: 'events'
});
Run Code Online (Sandbox Code Playgroud)
一切正常,表创建并包含我将用户作为参与者进入事件.问题是通过关联查询.我正在尝试为当前用户获取事件,因此我需要创建者是当前用户的事件和其中一个参与者是当前用户的事件.问题是第二部分"查询当前用户是参与者之一".我期待这样的事情
'api/events?$or[0][creatorId]=currUserId&$or[1][participants][$contains]=currUserId'
但它没有工作因为没有像"参与者"这样的列被包含在内,所以我无法查询它.所以现在我只是获取所有事件并在挂钩后为当前用户过滤它们,但它似乎是错误的.这样做的正确方法是什么?
并且我知道我可以通过将用户包含在用户中并获取他来获取用户是参与者之一的事件但是问题是我无法将所有数据排序在一起,它被单独排序而另一个问题是在前端进行分页.
查询嵌套关联不是 Feathers 通用查询语法的一部分。在 Sequelize 的情况下,应使用params.sequelize根据您的需要组装查询,并包含如Feathers-Sequelize 关联文档中所示的内容:
// GET /my-service?name=John&include=1
function (context) {
if (context.params.query.include) {
const AssociatedModel = context.app.services.fooservice.Model;
context.params.sequelize = {
include: [{
model: AssociatedModel
// normal Sequelize where query here
}]
};
// delete any special query params so they are not used
// in the WHERE clause in the db query.
delete context.params.query.include;
}
return Promise.resolve(context);
}
Run Code Online (Sandbox Code Playgroud)