更改左连接中的字段名称

changing the field name in a leftjoin

我有一个包含此查询的 Repo

@EntityRepository(Refund)
export class RefundRepository extends Repository<Refund> {
getRefundsByUserId(id: number): Promise<Refund[]> {
return this.createQueryBuilder('refund')
.select([
  'refund.id',
  'refund.userId',
  'refund.amount',
  'refund.createdAt',
  'refund.updatedAt',
])
.leftJoinAndSelect('refund.fkFlightRefund', 'flight')
.leftJoinAndSelect('refund.currency', 'refundCurrency')
.leftJoinAndSelect('refund.status', 'refundStatus')
.where({  userId : id })
.getMany();

}

我的问题是 refund.fkFlightRefund ,我想 return 一个字段名称 "flight" 但我得到 "fkFlightRefund",

我也试过使用这个左连接:

    .leftJoinAndSelect('refund.fkFlightRefund', 'flights' , 'refund.fkFlightRefund.title = :title',
{ title: 'flight' },)

在谷歌搜索问题后,

我想做的事情可行吗?

任何帮助都行!

你要的是.leftJoinAndMapOne()

因此,您的代码将以类似以下内容结尾:

@EntityRepository(Refund)
export class RefundRepository extends Repository<Refund> {
getRefundsByUserId(id: number): Promise<Refund[]> {
return this.createQueryBuilder('refund')
.select([
  'refund.id',
  'refund.userId',
  'refund.amount',
  'refund.createdAt',
  'refund.updatedAt',
])
.leftJoinAndMapOne('refund.flights','refund.fkFlightRefund', 'flight')
.leftJoinAndSelect('refund.currency', 'refundCurrency')
.leftJoinAndSelect('refund.status', 'refundStatus')
.where({  userId : id })
.getMany();

}

还有一个可选的第四个参数来设置条件,以备不时之需。

注意,如果你要映射很多项(因为命名,所以说,flightS),你应该使用.leftJoinAndMapMany,所以它映射了一个项目数组。

您代码中的 flight 只是将此映射为查询中其他连接的别名,这就是它不起作用的原因。

此外,另一种选择是将关系名称从 fkFlightRefund 重命名为 flights,因此左连接已经将其映射到您想要的名称,但如果您这样做可能无法实现对列名有限制。