Mru*_*ela 5 javascript node.js bookshelf.js knex.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);
});
Run Code Online (Sandbox Code Playgroud)
它抛出
Undefined binding(s) detected when compiling SELECT query.
Run Code Online (Sandbox Code Playgroud)
它在 0.11.5 上运行良好,从 0.11.6 开始它停止工作。我现在指的是 0.13.0。
useNullAsDefault: true
Run Code Online (Sandbox Code Playgroud)
适用于插入查询但不适用于选择查询。我应该通过任何标志来解决这个错误吗?
.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);
});
Run Code Online (Sandbox Code Playgroud)
除非书架在那里添加了一些额外的魔法......
该useNullAsDefault: true选项仅用于在一次插入中插入多行。除非您使用 sqlite(检查http://knexjs.org/#Builder-insert 的最后一个示例),否则使用它是没有意义的。