簡體   English   中英

Sequelize:在 where 子句中使用在 sequelize.literal 中創建的字段

[英]Sequelize: use field created in sequelize.literal in where clause

我正在使用 sequelize.literal function 創建一個聚合字段,這是其他方式無法實現的。 現在我想使用 sequelize 的內置“where”子句來過濾這個新字段上的值。

DB_A.findAll({
attributes: {
  include: [
    [
      sequelize.literal(
        `(SELECT COUNT (*) FROM DB_B as DB_B WHERE DB_B.a_id = DB_A.id)`
      ),
      "b_count",
    ],
         
  ]} 
where:{ b_count:{[Op.gte]:10}}
 })

當我這樣做時,我得到“'where 子句'中的未知列'DB_A.b_count'”。 我也試過:

where:{[sequelize.literal("b_count")]:...}

它適用於 sequelize 的 order 屬性,但不適用於此處。

有任何想法嗎?

好的,我想通了。 您需要使用“have”而不是“where”,因為這將是使用常規 MySQL 的方式。 由於某種原因, Sequelize.having不在 DOCS/API 上,我已經在 git 存儲庫中打開了一個問題。

上面的代碼將是:

DB_A.findAll({
attributes: {
  include: [
    [
      sequelize.literal(
        `(SELECT COUNT (*) FROM DB_B as DB_B WHERE DB_B.a_id = DB_A.id)`
      ),
      "b_count",
    ],
         
  ]} 
having:{ ["b_count"]:{[Op.gte]:10}}
 })

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM