[英]How to access a variable from a knex query inside of a second knex query?
[英]How to query pairs with knex
我有一個簡單的表(PostgreSQL),它包含兩個整數列,比如idx
和idy
。 我想使用 knex 來查詢它以獲取與規定的組合idx/idy
列表相對應的所有行,例如,生成一個查詢,例如:
select * from "datatable" where (idx, idy) IN (('1', '10'), ('2', '20'))
Knex 確實提供了whereIn
方法,但它似乎不支持多列。 我設法通過以下方式實現了結果:
const knex_conf = require('./knexfile');
const knex = require('knex')(knex_conf.development);
const pgFormat = require('pg-format');
const pairs = [ [1, 10], [2, 20] ];
var P = knex.table('datatable').whereRaw(`(idx,idy) IN ${pgFormat('(%L)',pairs)}`).toSQL();
console.log(P.sql);
但我想知道是否會有更優雅的解決方案(無需使用pg-format
或類似的“外部”工具)。
實際上 knex 已經支持這個了:
https://runkit.com/embed/f2wym1fwfrn1
const Knex = require('knex');
const knex = Knex({
client: 'pg'
});
const pairs = [ [1, 10], [2, 20] ];
knex('datatable').whereIn(['idx','idy'], pairs).toSQL();
Knex 不要求您使用“查詢構建器”功能。 事實上,隨着查詢變得越來越復雜,我強烈建議不要使用它……與僅僅自己寫出 SQL 相比,您將花費更多的時間嘗試正確地將所有函數粘合在一起。 讓我們面對現實吧,在一天結束時,無論如何,knex 只是為您吐出 sql。 也就是說,這樣的事情應該有效:
return knex.raw(`
select *
from datatable
where (idx, idy) IN ((1, 10), (2, 20)....)
`);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.