KnexJS原始方法在一种情况下不起作用
在一个项目上使用KnexJS,并且在整个项目中一直使用.raw()
方法。
我现在有一种情况, .raw
只是没有被构build到SQL中,所以syntax error at end of input
错误结束时, syntax error at end of input
。 如果我转储的SQLstring,我可以看到为什么,因为它的失败
'update "mytable" set "a" = ? returning '
我可以看到为什么它有一个问题,我遇到的问题是返回是一个Raw
值,所以我只是不知道为什么它没有被编译与SQL。
knexQuery.update(data).into('mytable').returning( knexQuery.raw('mytable::json') );`
如果我使用一个string,而不是returning()
方法中的raw
string,它将编译string。
如果我安慰knexQuery.raw('mytable::json')
部分,它显示为一个Raw对象,具有正确的对象数据…
Raw { client: Client_PG { ... }, sql: 'mytable::json', bindings: undefined, _wrappedBefore: undefined, _wrappedAfter: undefined, _debug: undefined } }
我知道SQL的工作,因为我填补了缺less的部分,它的工作原理,但SQL不是问题,我只是不知道为什么raw()
方法没有被编译与SQLstring。
我也有另一块代码(和INSERT
之一)在我的代码中的其他地方使用相同的returning( knexQuery.raw(....) )
,并且工作得很好。
我开始认为这是代码中的一个错误,但是花了一个小时去了KnexJS库代码之后,我看不出有什么理由不起作用。
那么为什么这段代码不能将原始的信息生成到查询中,而我的另一个没有问题并且可以正常工作呢?
我已经到了只想使用别的东西来解决问题的地步,但是如果不使用这种方法就不可能。
这是knex
https://runkit.com/mikaelle/592412c3a631940012a51928中的错误,请在knex github中打开问题。 看起来像处理原始input只是没有对returning
器方法实施。
无论如何,看起来这是一个解决方法:
knex('TestTable') .insert({ foo: 'bar' }) .returning([knex.raw('mytable::json')]) // raw wrapped in array .toSQL();