更改左连接中的字段名称
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' },)
在谷歌搜索问题后,
我想做的事情可行吗?
任何帮助都行!
因此,您的代码将以类似以下内容结尾:
@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
,因此左连接已经将其映射到您想要的名称,但如果您这样做可能无法实现对列名有限制。
我有一个包含此查询的 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' },)
在谷歌搜索问题后,
我想做的事情可行吗?
任何帮助都行!
因此,您的代码将以类似以下内容结尾:
@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
,因此左连接已经将其映射到您想要的名称,但如果您这样做可能无法实现对列名有限制。