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
适用于插入查询,但不适用于选择查询。我应该通过任何标志来解决此错误吗?
答案 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的最后一个例子)。