为什么 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
)共享名称的每一列 :(
我正在使用 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
)共享名称的每一列 :(