簡體   English   中英

如何使用 knex 查詢對

[英]How to query pairs with knex

我有一個簡單的表(PostgreSQL),它包含兩個整數列,比如idxidy 我想使用 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.

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