我有一个带这个查询的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,我想返回一个字段名"fkFlightRefund",但是我得到了“fkFlightRefund”,
我还尝试使用这个左联接:
.leftJoinAndSelect('refund.fkFlightRefund', 'flights' , 'refund.fkFlightRefund.title = :title',
{ title: 'flight' },)在搜索了这个问题之后,
我想做的事有可能吗?
任何帮助都行!
发布于 2019-08-13 14:33:01
你想要的是一个.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,因此左联接已经将它映射到您想要的名称,尽管如果对列名有约束,这可能是不可能的。
https://stackoverflow.com/questions/57471381
复制相似问题