带连接的 Knex 查询 - 适用于 .where 但不适用于 .whereRaw

Knex query with join - works with .where but not with .whereRaw

我正在使用 knex 和 objection.js 来处理我的 postgres 数据库。我有这个查询涉及三个不同的 tables 和不同的可能过滤器。 我遇到的问题是,当我使用 .whereRaw 进行左连接和查询时,出现以下错误: 错误:缺少 table "publication" 的 FROM 子句条目 如果我改用 .where,它就可以工作。但是我需要 whereRaw 来使过滤器不区分大小写。

      Reader.query(Reader.knex())
        .where('Reader.id', '=', readerId)        
        .eager('[tags, publications.[tags, attributions]]')
        .modifyEager('publications', builder => {
          if (filter.title) {
            const title = filter.title.toLowerCase()
            builder.where('Publication.name', 'like', `%${title}%`)
            // builder.whereRaw(
            //  'LOWER(name) LIKE ?',
            //   '%' + filter.title.toLowerCase() + '%'
            // )
          }
          if (filter.attribution || filter.author) {
              builder.leftJoin(
              'Attribution',
              'Attribution.publicationId',
              '=',
              'Publication.id'
            )
          }
          if (filter.author) {
            builder
              .where('Attribution.normalizedName', '=', author)
              .andWhere('Attribution.role', '=', 'author')
          }
          if (filter.attribution) {
            builder.where(
              'Attribution.normalizedName',
              'like',
              `%${attribution}%`
            )
            if (filter.role) {
              builder.andWhere('Attribution.role', '=', filter.role)
            }
          }
          orderBuilder(builder)
          builder.limit(limit)
          builder.offset(offset)
        })


注释掉的 .whereRaw 查询是我想要执行的查询。 .where 和 .whereRaw 之间有什么不同会导致一个工作而不是另一个工作?

我不确定为什么 whereRaw 不起作用,必须进行一些调试才能找出答案,但您可以使用 ilike 进行不区分大小写的搜索 where 示例:

builder.where('Publication.name', 'ilike', `%${title}%`)

Reference