我在这段代码中有 3 个表,这些表是:
用户 - 包含有关用户的信息
小部件 - 包含有关小部件的信息
user_widgets - 用于前面表之间的 m-n 关系
最后一个表,除了其他 2 个表的 ids 有 2 个额外的字段:读和写
我用来连接到这些表的代码是
Widget.belongsToMany(User, { through:User_widget, foreignKey: 'widget_id' });
User.belongsToMany(Widget, { through:User_widget, foreignKey: 'user_id' });
User_widget 有一个别名为“perms”,所以当我打电话
User.findOne ... then(function(user){
user.getWidgets().then(function(widgets) {
在返回的小部件对象中,我有 perms 对象,其中包含 2 个读写字段,所以一切正常。
我的问题是我需要过滤小部件,以便我只获得我已读取权限的小部件。
我试过
user.getWidgets({
where : {
read : false
}})
但它会产生一个 sql 查询,如
SELECT "widget"."id", "widget"."name", "perms"."widget_id" AS "perms.widget_id", "perms"."user_id" AS "perms.user_id", "perms"."read" AS "perms.read", "perms"."write" AS "perms.write"
FROM "widgets" AS "widget"
WHERE "widget"."read" = false
INNER JOIN "user_widget" AS "perms" ON "widget"."id" = "perms"."widget_id" AND "perms"."user_id" = '5';
我需要这样的查询:
SELECT "widget"."id", "widget"."name", "perms"."widget_id" AS "perms.widget_id", "perms"."user_id" AS "perms.user_id", "perms"."read" AS "perms.read", "perms"."write" AS "perms.write"
FROM "widgets" AS "widget"
INNER JOIN "user_widget" AS "perms" ON "widget"."id" = "perms"."widget_id" AND "perms"."user_id" = '5' AND "perms"."read" = false;
最佳答案
尝试:
user.getWidgets({
through: {
where : {
read : false
}
}
})
关于sql - 在 where 上的可接缝中使用一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33351537/