【问题标题】:Sequelize Custom Field seperated from tablesSequelize 与表格分离的自定义字段
【发布时间】:2018-02-15 21:27:12
【问题描述】:

我正在尝试进行 IN 查询,但我正在查询的字段不是表的元素。它是硬编码的。

await models.users.findOne({
  where: {
    id: 12,
    2: {$in: [1, 2, 3]}
  }
});

问题是,sequelize 将表名放在我的字段的开头。

WHERE `users`.`2` IN (1, 2, 3) 

由于我的表中没有字段 2,它会抛出“where 子句中的未知列 'users.2'”

其实这是我需要的,并且在原生 sql 中工作:

WHERE 2 IN (1, 2, 3) 

更新

为了更好地解释它,我正在编写整个 SQL:

    SELECT count(`users`.`id`) AS `count`
    FROM `users` AS `users`
      INNER JOIN `payment_log` AS `succeed_payment`
        ON `users`.`id` = `succeed_payment`.`user_id` AND `succeed_payment`.`state` = 'success'
      LEFT OUTER JOIN `user_profile` AS `profile` ON `users`.`id` = `profile`.`user_id` AND `profile`.`state` = 'submitted'
    WHERE
      `users`.`country` = 'BLR'
      AND (`users`.`kyc_state` IN ('prepared', 'applicant_created', 'consider') OR `users`.`kyc_state` IS NULL)
    GROUP BY `users`.`id`
    HAVING
      1 IN ((SELECT tag_id
             FROM user_tags UT
             WHERE users.id = UT.user_id)) AND
      2 IN ((SELECT tag_id
             FROM user_tags UT
             WHERE users.id = UT.user_id));

1 和 2 来自 URL 查询。我正在检查客户是否有这些标签。

不幸的是,sequelize 在我的查询中添加了反引号并将其返回到:

  HAVING
    `1` IN ((SELECT tag_id
             FROM user_tags UT
             WHERE users.id = UT.user_id)) AND
    `2` IN ((SELECT tag_id
             FROM user_tags UT
             WHERE users.id = UT.user_id));

在这种情况下,我收到“未知列 1”错误

【问题讨论】:

  • 好问题,我不知道是否有内置支持,但是,您可以随时使用raw-queries
  • 很遗憾,我不能使用 raw-query,这只是一个基本的查询示例。改变太大了。
  • 不,这是一个非常不同的情况。
  • 如果2[1,2,3] 都不是来自表 - 为什么它在查询开头?那里where 子句毫无意义……

标签: mysql sequelize.js


【解决方案1】:

您可以通过以下方式实现:

where : {
    '$2$' : {$in: [1, 2, 3]}
}

【讨论】:

  • 这从查询 (users.) 中删除了表名,但 sequelize 仍然放置反引号,因此 MySQL 说 unknown column 1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-22
  • 2014-01-28
  • 1970-01-01
相关资源
最近更新 更多