【发布时间】:2018-12-11 05:21:24
【问题描述】:
knex.raw(sql, bindings) 和 knex.schema.raw(statement)。
看来这两个函数有不同的签名。
如果它们是等价的,我如何使用knex.schema.raw(statement) 并将bindings 传递给它?
【问题讨论】:
标签: knex.js
knex.raw(sql, bindings) 和 knex.schema.raw(statement)。
看来这两个函数有不同的签名。
如果它们是等价的,我如何使用knex.schema.raw(statement) 并将bindings 传递给它?
【问题讨论】:
标签: knex.js
knex.raw 创建可以立即执行的查询构建器实例。
knex.schema.* 的工作方式有点不同。 Knex 模式方法创建一个查询数组,然后在解析模式构建器时一个一个地执行。
例如,如果您执行knex.schema.createTable(t => ...).raw('DROP ALL').toSQL(),您将看到生成了多个查询,并且它们都将在触发架构生成器时执行。
如果您只使用await knex.schema.raw('SELECT 1') 或await knex.raw('SELECT 1'),则不会有任何差异。但是使用knex.schema.raw 你也可以这样做:
await knex.schema.raw('SELECT 1').raw('SELECT 2');
它返回一个数组,其中找到了两个查询的结果。因此,完全有可能利用该功能来一个接一个地运行多个查询,如下所示:
await knex.schema
.raw('?', [knex('table1').where('id', 1)])
.raw('?', [knex('table2').where('id', 2)]);
同样knex.schema.raw 不返回QueryBuilder,但它返回SchemaBuilder 并提供不同的方法。
所以knex.schema.raw 不能用作普通查询的一部分,例如在knex('table').where(knex.raw('id = 1')) 中
【讨论】:
knex.schema.raw(statement: string): SchemaBuilder; 不支持放置和传递绑定。