Построитель запросов knex и порядок вызова методов в цепочке

1

Читая документацию на knex и обманутую страницу, я обнаружил, что в приведенных примерах. .where() всегда вызывается сразу после ссылки на таблицу:

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'), экспериментально, я выяснил, что построитель запросов просто "собирает" все методы между knex и .then() (или в конце инструкции) и составляет их в один запрос и запускает его.

Я был бы полностью удовлетворен, если кто-то подтвердит вышеуказанное выражение ссылкой на документацию или какой-либо другой ресурс knex.

Теги:
knex.js

1 ответ

1
Лучший ответ

Обычно построитель запросов собирает все вызванные вызовы вызываемого метода, и порядок их вызова не имеет значения. Это связано с тем, что сгенерированный SQL не может быть сгенерирован в каком-либо другом порядке.

Однако есть некоторые методы, когда порядок их вызова действительно имеет значение. Наиболее заметны с помощью .clearSelect, .clearWhere и .clearOrder методы http://knexjs.org/#Builder-clear

Также, когда несколько столбцов являются обновлениями в одном заявлении, порядок обновлений фактически отражает порядок вывода операторов SET.

Вероятно, есть и другие тонкости, где порядок имеет значение, но я не верю, что кто-то их проследил.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню