【问题标题】:TypeORM Querybuilder get nested INNER JOINTypeORM Querybuilder 获取嵌套的 INNER JOIN
【发布时间】:2021-07-31 06:14:36
【问题描述】:

我有一个TripEntity,它在vehicle_id 列中引用了VehicleVehicleEntity 本身在 vehicle_details_id 列中引用了 VehicleDetailsEntity

旅行实体

id vehicle_id
1 99

车辆实体

id vehicle_details_id
99 100

VehicleDetailsEntity

id registration_plate
100 DOGETOMOON

如何使用QueryBuilder 获取所有三个:TripEntity、VehicleEntity 和 VehicleDetails?

    const trip = await db
      .createQueryBuilder(TripEntity, "trip")
      .innerJoinAndSelect("trip.vehicle_id", "vehicle")
      /* This does not work...
      .innerJoinAndSelect("vehicle. vehicle_details_id", "details")
     */
      .where("trip.created_at >= :after",{ after })
      .getMany();

【问题讨论】:

    标签: mysql node.js typeorm


    【解决方案1】:

    我认为明确定义连接条件可以解决问题。 请检查以下查询 -

    async findVehicleDetails(request): Promise<any>{
        return await getRepository(TripEntity).
        .createQueryBuilder("tripEntity")
        .innerJoinAndSelect("VehicleEntity","vehicleEntity","vehicleEntity.id = tripEntity.vehicle_id")
        .innerJoinAndSelect("VehicleDetailsEntity","vehicleDetailsEntity","vehicleDetailsEntity.id = vehicleEntity.vehicle_details_id")
        .where("tripEntity.created_at >= :after",{ after })
        .getMany()
    }
    

    【讨论】:

      【解决方案2】:

      如果你要加入多个实体,你可以试试innerJoinAndMapOne

      const trips = (await db
        .createQueryBuilder(TripEntity, "trip")
        .innerJoinAndMapOne(
          "trip.vehicle",
          VehicleEntity,
          "vehicle",
          "trip.vehicle_id = vehicle.id"
        )
        .innerJoinAndMapOne(
          "trip.vehicleDetails",
          VehicleDetailsEntity,
          "vehicle_details",
          "vehicle.vehicle_details_id = vehicle_details.id"
        )
        .where("trip.created_at >= :after", { after })
        .getMany()) as (TripEntity & {
          vehicle: VehicleEntity;
          vehicleDetails: VehicleDetailsEntity;
        })[];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-18
        • 2021-01-14
        • 1970-01-01
        • 1970-01-01
        • 2021-04-08
        • 2021-06-30
        相关资源
        最近更新 更多