代码之家  ›  专栏  ›  技术社区  ›  Lin Du Correcter

knex.raw()和knex.schema.raw()之间有什么区别?

  •  2
  • Lin Du Correcter  · 技术社区  · 6 年前

    knex.raw(sql, bindings) knex.schema.raw(statement) .

    这两个函数似乎具有不同的特征。

    如果它们相等,我如何使用 knex.schema.raw(语句) 并通过 bindings 对吗?

    1 回复  |  直到 6 年前
        1
  •  3
  •   Mikael Lepistö    6 年前

    knex.raw 创建可以立即执行的查询生成器实例。

    knex.schema.*

    举个例子,如果你这样做了 knex.schema.createTable(t => ...).raw('DROP ALL').toSQL() 您将看到生成了多个查询,它们都将在触发schema builder时执行。

    如果你只是 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)]);
    

    而且 不回来 QueryBuilder SchemaBuilder

    所以 knex.schema.raw knex('table').where(knex.raw('id = 1'))