首页 > 解决方案 > “getManager().query()”在 TypeORM 中是如何工作的?

问题描述

我现在正在学习 TypeORM,但我无法真正理解“查询”方法,它是如何工作的。

示例代码如下所示。

    export const lists = async (
      roleFilter: RoleFilter,
      filter: Filter,
      dateFilter: BetweenDate,
    ) => {
      const carLists = await getCars(roleFilter, filter);
      if (carLists.length === 0) {
        return { totalCount: 0, lists: [] };
      }
      const carIds = carLists.map(car => car.id); // **2 여기서 아이디만 가져옴

      const isCheckParam: number[] = [];
      let isCheckSQL = '';

      if (filter.isCheck !== null) {
      ....
      }

      const typeParamArray: string[] = [];
      const typeSQLArray: string[] = [];
      if (filter.impact === 1) {
        typeParamArray.push('impact');
        typeSQLArray.push('car_alarm.type = ?');
      }
      ....

      const typeSQL =
        typeSQLArray.length === 0 ? '' : `(${typeSQLArray.join(' OR ')}) AND`;

      const countQuery = `
        SELECT
          count(*) AS cnt
        FROM
          car_alarm
        WHERE ${typeSQL} ${isCheckSQL} car_alarm.carId IN (?) AND DATE(alarmAt) BETWEEN ? AND ?

      const countQuery = `
        SELECT
      count(*) AS cnt
    FROM
      car_alarm
    WHERE ${typeSQL} ${isCheckSQL} car_alarm.carId IN (?) AND DATE(alarmAt) BETWEEN ? AND ?
  `;

  const countResult = await getManager().query(countQuery, [
    ...typeParamArray,
    ...isCheckParam,
    carIds,
    dateFilter.start,
    dateFilter.end
  ]);

在这部分中使用 getManager().query()。

  const countResult = await getManager().query(countQuery, [
    ...typeParamArray,
    ...isCheckParam,
    carIds,
    dateFilter.start,
    dateFilter.end
  ]);

有人可以解释一下'query()'是如何工作的吗?不知何故,我找不到任何示例或对此进行解释。

标签: typescripttypeorm

解决方案


query()方法执行原始参数化 sql 查询,因此您必须编写特定于您正在使用的数据库的 sql 查询。的第二个参数query()是 SQL 查询的参数数组,它们在 sql 查询中被替换

执行原始 sql 查询不需要 TypeORM,因此可以使用任何数据库驱动程序包(例如mysqlpg)。使用 TypeORM 的优点是查询会自动创建并映射到实体对象。


推荐阅读