knex 查询生成器和链中调用方法的顺序
knex query builder and the order of methods called in a chain
阅读 knex documentation and knex cheat sheet,我发现在提供的示例中 .where()
总是在 table 引用之后立即调用:
knex('users')
.where({ id: 2 })
.update({ name: 'Homer' })
// UPDATE `users` SET `name`='Homer` WHERE `id`=2
上面的代码看起来合乎逻辑,因为完整的数据集在 运行 .update()
.
之前被缩小了
令我困惑的是交换方法会产生相同的 SQL 查询:
knex('users')
.update({ name: 'Homer' })
.where({ id: 2 })
// UPDATE `users` SET `name`='Homer` WHERE `id`=2
新手可能会直觉地期望 WHERE
在 UPDATE
之后应用,类似于 javascript 数组方法。
尝试其他示例,如 knex.select().table('books')
,通过实验,我发现 查询构建器只是 "collects" knex
和 [=18= 之间的所有方法](或语句末尾),并将它们组合成一个 单个 查询,然后运行它 。
如果有人通过 link 对文档或其他 knex 资源确认上述声明,我将非常满意。
通常查询构建器会收集所有已调用的构建器方法,调用它们的顺序无关紧要。这是因为生成的 SQL 无法按任何其他顺序生成。
但是有一些方法,调用它们的顺序实际上很重要。最值得注意的是 .clearSelect
、.clearWhere
和 .clearOrder
方法 http://knexjs.org/#Builder-clear
此外,当多个列在单个语句中更新时,更新顺序实际上反映了 SET
语句输出的顺序。
可能还有一些其他的微妙之处,其中顺序很重要,但我不相信有人曾经追踪过所有这些细节。
阅读 knex documentation and knex cheat sheet,我发现在提供的示例中 .where()
总是在 table 引用之后立即调用:
knex('users')
.where({ id: 2 })
.update({ name: 'Homer' })
// UPDATE `users` SET `name`='Homer` WHERE `id`=2
上面的代码看起来合乎逻辑,因为完整的数据集在 运行 .update()
.
令我困惑的是交换方法会产生相同的 SQL 查询:
knex('users')
.update({ name: 'Homer' })
.where({ id: 2 })
// UPDATE `users` SET `name`='Homer` WHERE `id`=2
新手可能会直觉地期望 WHERE
在 UPDATE
之后应用,类似于 javascript 数组方法。
尝试其他示例,如 knex.select().table('books')
,通过实验,我发现 查询构建器只是 "collects" knex
和 [=18= 之间的所有方法](或语句末尾),并将它们组合成一个 单个 查询,然后运行它 。
如果有人通过 link 对文档或其他 knex 资源确认上述声明,我将非常满意。
通常查询构建器会收集所有已调用的构建器方法,调用它们的顺序无关紧要。这是因为生成的 SQL 无法按任何其他顺序生成。
但是有一些方法,调用它们的顺序实际上很重要。最值得注意的是 .clearSelect
、.clearWhere
和 .clearOrder
方法 http://knexjs.org/#Builder-clear
此外,当多个列在单个语句中更新时,更新顺序实际上反映了 SET
语句输出的顺序。
可能还有一些其他的微妙之处,其中顺序很重要,但我不相信有人曾经追踪过所有这些细节。