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")])
)
我正在努力处理一个更复杂的 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")])
)