Knex查询生成器在where子句中需要参数If添加更多where子句


const result = await connection
.select({
NameOne: 'Table1.NameOne',
name: 'Table1.name',
key: 'Table1.key',
code: 'Table1.code',
indOne: 'Table1.ind1',
indTwo: 'Table1.ind2',
tcd: 'Table2.tcd',
indThree: 'Table2.ind3',
})
.from('Table1')
.join('Table2', 'Table1.col1', 'Table2.col1')
.where('Table2.cd', 'Table1.cd')
.where('Table2.userId', userId)
.where('Table1.userId', userId)
.catch((err) => err);

在上面的代码中,第一个where子句需要如下参数。

bindings:["Table1.cd","john","john"]不确定它期望绑定参数的原因。

我的要求类似于下面的内容,我将使用不同表中的实际列添加更多条件。

SELECT table1.nameone,
table2.NAME,
table1.KEY,
table2.cd,
table1.ind1
FROM   table1,
table2
WHERE  table1.col1 = table2.col1
AND table1.nameone = table1.NAME
AND table2.userid = 'John'
AND table1.userid = 'John'; 

请让我知道我在这里做了什么不对。

谢谢

默认情况下,假设Knex.js在其Where子句中获得一个值。

为了在2列之间进行绑定,可以使用whereRaw??标记。

const result = await connection
.select({
NameOne: 'Table1.NameOne',
name: 'Table1.name',
key: 'Table1.key',
code: 'Table1.code',
indOne: 'Table1.ind1',
indTwo: 'Table1.ind2',
tcd: 'Table2.tcd',
indThree: 'Table2.ind3',
})
.from('Table1')
.join('Table2', 'Table1.col1', 'Table2.col1')
.whereRaw('?? = ??', ['Table2.cd','Table1.cd'])
// ---^
.where('Table2.userId', userId)
.where('Table1.userId', userId)
.catch((err) => err);

最新更新