KNEX编译SELECT查询时检测到未定义的绑定

时间:2017-07-11 06:09:01

标签: javascript node.js knex.js bookshelf.js

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);
});

它抛出

Undefined binding(s) detected when compiling SELECT query.

0.11.5正常工作,0.11.6以后停止工作。我现在指的是0.13.0。

useNullAsDefault: true

适用于插入查询,但不适用于选择查询。我应该通过任何标志来解决此错误吗?

1 个答案:

答案 0 :(得分:3)

.where('id', undefined)在SQL中没有任何意义。你不能查询不存在的东西。

也许您想查询where id IS NULL?使用knex可以这样做:.whereNull('id')

对于早期的knex版本,它将被忽略,但从0.12.x开始。

因此,为了获得更新的等效功能(实际上它与旧的< 0.12版本兼容)你应该做的knex版本:

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

除非书架在那里添加一些额外的魔法......

useNullAsDefault: true选项仅用于在一个插入中插入多行时。除非你使用sqlite,否则使用它是没有意义的(查看http://knexjs.org/#Builder-insert的最后一个例子)。