如何将knex的raw方法的占位符设置为null?

时间:2019-06-19 08:17:53

标签: mysql knex.js

我尝试使用knex raw方法在mysql上调用批量更新查询。

   const ids:number[] = [1,2,3];
   const values:string[] = ['apple', null, "orange"]
   knex('testtable').raw(
      `
      UPDATE
        TEST_TABLE
      SET
        COL1 = ELT(FIELD(id, :searchIds), :searchValues),
        UPDATE_DATE = NOW()
      WHERE ID IN (:searchIds)
    `,
      { searchIds: ids, searchValues: values },
    );`enter code here`

但是,未获得预期的结果。 这是因为值包含一个字符串和null,但是theraw方法的占位符不允许为null。 请告诉我,如何设置占位符为null?

1 个答案:

答案 0 :(得分:0)

在knex中绑定值数组不能那样工作。 SQL具有多种类型的数组,因此不能将它们明确映射为SQL。

在文档中:https://knexjs.org/#Raw-Bindings是如何将值数组传递给knex的示例。

const myArray = [1,2,3]
knex.raw(
  `select * from users where id in (${myArray.map(() => '?').join(',')})`, 
  [...myArray]
);

在这种情况下,使用命名绑定几乎是不可能的(实际上,命名绑定会转换为knex内的位置绑定,因此不会对性能造成影响)。