Почему Knex не использует имена столбцов таблицы в результирующих объектах строк? - PullRequest
0 голосов
/ 21 марта 2020

Я делаю запрос с Knex (PostgreSQL):

knex('foos')
  .select(columnsThatAreAMixOfFooAndBarColumns)
  .leftJoin('bars', 'foos.bar_id', 'bars.id')
  .where({ 'foos.id': id })

Когда я возвращаю результаты, я не возвращаю [{foo_id: 1, bar_id: 2, .... Вместо этого я получаю обратно [{ id: 1, ....

Что удивительно, так это то, что Knex создает правильный запрос: если я войду в него, я увижу SELECT "foos"."id", "bars"."id", .... Но по какой-то странной причине я не могу понять, Knex решает объединить все полученные столбцы вместе, поэтому я теряю bars.id полностью и foos.id переименовывается в id.

Может кто-нибудь объяснить, что что происходит, и как я могу это исправить? Я попытался добавить returning, используя columns вместо select, и, в противном случае, изменить способ создания запроса, но это не помогло, и снова сборка Knex не является проблемой: это результаты .

РЕДАКТИРОВАТЬ: Я повторил тот же точный запрос, используя вместо этого knex.raw(query) ... и получил точно такой же (id, а не foos_id) результат. Поэтому проблема определенно не в том, как делается запрос: я каким-то образом что-то делаю, чтобы Knex строил результаты так, чтобы игнорировать полные имена столбцов.

1 Ответ

2 голосов
/ 21 марта 2020

Ну, насколько я могу судить (и это трудно, потому что документация почти исключительно касается запроса building , почти ничего не касающегося результатов), ответ таков: "Это именно то, как работает Knex". Кажется, что было бы более разумно, чтобы библиотека возвращала полные имена, но по какой-то причине это не так.

Вместо этого, если вы хотите присоединиться к таблицам в Knex, кажется, что вы иметь для псевдонима (ie. foos.id AS foos_id) в каждом столбце с общим именем: (

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...