为什么 Knex 在结果行对象上不使用 Table 列名?

Why Doesn't Knex Use Table Column Names on the Resulting Row Objects?

我正在使用 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", ...。但是由于某些我无法弄清楚的 st运行ge 原因,Knex 决定将所有结果列合并在一起,所以我完全失去了 bars.id 并且 foos.id 被重命名为 id.

谁能解释一下这是怎么回事,我该如何解决?我已经尝试添加 returning,使用 columns 而不是 select,并以其他方式更改我进行查询的方式,但它没有帮助,而且查询 Knex 构建也不是问题:是结果。

编辑: 我使用 knex.raw(query) 重新 运行 完全相同的查询......并得到完全相同的(id , 而不是 foos_id) 结果。所以问题绝对不是查询的方式:我正在做一些事情让 Knex 以忽略限定列名称的方式构建结果。

好吧,据我所知(这很难,因为文档几乎完全是关于查询 building,几乎没有关于结果的内容)答案是 "this is just how Knex works".似乎让库 return 具有限定名称更有意义,但无论出于何种原因,它都没有。

相反,如果您想在 Knex 中连接表,似乎您 别名(即 foos.id AS foos_id)共享名称的每一列 :(