Objection.js 如何在内部查询中使用外部值?

Objection.js How to use outer values in inner query?

我正在努力处理一个更复杂的 SQL 查询,它必须在 Objection.js 中。 以下是目前的代码

const tagEntry = await Tag_overview.query()
    .where('playable') //the playable column is a boolean
    .whereExists(
        InnerTableName.query().findById([<normal variable>, tag.id]) //<= tag.id is the id of the row in the outer query
            )
    )
    .orderBy(raw('random()'))// this randomly orders the selection
    .limit(1)

"tag.id" 应该是当前正在检查的 top/outer 查询中行的值。在 SQL 中,我会用一个简单的行来解决它,例如(< normal variable> 是传递到查询中的 Javascript 变量,可以被视为硬编码值,它和 tagid 是一个复合键)

and EXISTS (SELECT tagid, othercolumn FROM kunstmakler_preselection WHERE tag.id = tagid AND <normal variable>  = othercolumn)

但我完全不知道如何在 Objection.js 中执行此操作。是的,它需要一个内部查询,但我如何在其中传递这个 tag.id?我完全迷路了,API 参考和食谱书都没有任何帮助(在这里找到:https://vincit.github.io/objection.js/recipes/

这里需要加入吗?值得吗? [tagoverview Table 相当小而 "InnerTableName" 相当大]。我觉得这不是真正的解决方案,因为在 ülain SQL 它会是一个非常光滑的衬里

首先确保您在模型中正确声明了组合键 InnerTableName https://vincit.github.io/objection.js/recipes/composite-keys.html

那么你应该可以做到:

.whereExists(
  InnerTableName.query().findById([theJsVariable, ref("Tag_overview.id")])
)