【问题标题】:Having trouble adding a where clause to a join table using Sequelizer for NodeJS使用 Sequelize for Node JS 将 where 子句添加到连接表时遇到问题
【发布时间】:2015-04-23 08:15:50
【问题描述】:

我在哪里执行以下操作。导致我出现问题的关键逻辑在第 7 行,我试图在连接表上指定 where 条件。

models.Portfolio.findAll({
        include: [{
            model: models.PortfolioPermissions,
        }],
        where: models.sequelize.or(
            {'userId': userId},
            {'PortfolioPermissions.userId': userId}
        ),
        order: [['startDate', 'DESC']]
    })

您可以看到下面的查询结果在第 9 行有一个主要问题。 Sequelize 在我的 where 子句前面加上投资组合表,这把一切都搞砸了。

SELECT `portfolios`.*,
       `sharedUsers`.`id` AS `sharedUsers.id`,
       `sharedUsers`.`permissions` AS `sharedUsers.permissions`,
       `sharedUsers`.`userId` AS `sharedUsers.userId`,
       `sharedUsers`.`portfolioId` AS `sharedUsers.portfolioId`
FROM `portfolios`
LEFT OUTER JOIN `portfolioPermissions` AS `sharedUsers` ON `portfolios`.`id` = `sharedUsers`.`portfolioId`
WHERE (`portfolios`.`userId`=1
       OR `portfolios`.`PortfolioPermissions.userId`=1)
ORDER BY `startDate` DESC;

如果有人可以在这里为我指明正确的方向,我将不胜感激。太感谢了。我正在使用 Postgres 仅供参考,但可能不相关。

【问题讨论】:

    标签: node.js postgresql sequelize.js


    【解决方案1】:

    连接表上的条件应该放在相关的include 条目中,而不是放在全局 where 条件中。 在您的情况下,应该可以使用以下方法:

    models.Portfolio.findAll({
        include: [{
            model: models.PortfolioPermissions,
            where: {'userId': userId}
    
        }],
        where: models.sequelize.or(
            {'userId': userId}
        ),
        order: [['startDate', 'DESC']]
    })
    

    【讨论】:

      猜你喜欢
      • 2019-07-14
      • 2017-07-29
      • 1970-01-01
      • 2022-11-04
      • 1970-01-01
      • 2014-01-19
      • 1970-01-01
      • 2015-01-05
      • 1970-01-01
      相关资源
      最近更新 更多