KNEX Undefined binding(s) detected when compiling SELECT query

纵然是瞬间 提交于 2019-12-13 14:53:46

问题


var knex = require('knex')(config);
var bookshelf = require('bookshelf')(knex);
var SKU = bookshelf.Model.extend({
    tableName: 'skus',

});
SKU.where('id', undefined).fetch().then(function (skus) {
    if (skus) console.log(skus.toJSON());
}).catch(function (err) {
    console.error(err);
});

It throws

Undefined binding(s) detected when compiling SELECT query.

It is working fine with 0.11.5, it stopped working with 0.11.6 onwards. I am pointing to 0.13.0 right now.

useNullAsDefault: true

works fine with insert queries but not select queries. Is there any flag i should pass to resolve this error?


回答1:


.where('id', undefined) does not mean anything in SQL. You cannot be querying something that is not there.

Maybe you wanted to query where id IS NULL? With knex it can be done like this: .whereNull('id')

With earlier knex versions it would have been just ignored, but starting from 0.12.x.

So to have equivalent functionality with newer (and actually it is compatible with older < 0.12 versions too) knex versions you should do:

SKU.fetch().then(function (skus) {
    if (skus) console.log(skus.toJSON());
}).catch(function (err) {
    console.error(err);
});

Unless bookshelf is adding some extra magic there...

The useNullAsDefault: true option Is used only for when inserting multiple rows in one insert. It does not make sense to use it unless you are using sqlite (check last example of http://knexjs.org/#Builder-insert).



来源:https://stackoverflow.com/questions/45026644/knex-undefined-bindings-detected-when-compiling-select-query

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!