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

KNEX Undefined binding(s) detected when compiling SELECT query

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

适用于插入查询但不适用于 select 查询。我应该传递任何标志来解决此错误吗?

.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 的最后一个示例),否则使用它没有任何意义。

sql 查询需要的参数与您在请求体中发送的参数不匹配。 在我的例子中,sql 期待参数“gradeId”,但在 requestBody 中我发送了“postId”