sql - 在 where 上的可接缝中使用一列

标签 sql postgresql sequelize.js

我在这段代码中有 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/

相关文章:

SQL - SET DEFAULT 在删除值时不起作用

node.js - Sequelize @6.3.4 无法连接到 docker -> postgres

javascript - Sequelize : Create join table attribute with set<Association>

node.js - Sequelize 迁移中的关联

sql - 打开和读取文本文件的存储过程

mysql - SQL查询SP从11个表获取数据并避免笛卡尔输出

SQL -- 在 select 语句中分配一个位变量

database - 在数据库中搜索字符串 'somewhere'

postgresql - 无法访问文件 "$libdir/plpgsql": No such file or directory

sql - SQL Interval 有问题