取出关系对象的数据

取出关系对象的数据

在一个查询中加载 photo 及 photo metadata 有两种方法。使用find *或使用QueryBuilder。我们先使用find *方法。 find *方法允许你使用FindOneOptions / FindManyOptions接口指定对象。

import { createConnection } from "typeorm";
import { Photo } from "./entity/Photo";
import { PhotoMetadata } from "./entity/PhotoMetadata";

createConnection(/*...*/)
  .then(async connection => {
    /*...*/
    let photoRepository = connection.getRepository(Photo);
    let photos = await photoRepository.find({ relations: ["metadata"] });
  })
  .catch(error => console.log(error));

photos 将包含来自数据库的 photos 数组,每个 photo 将包含其 photo metadata。详细了解本文档中的查找选项。

使用查找选项很简单,但是如果你需要更复杂的查询,则应该使用QueryBuilder。 QueryBuilder允许以更优雅的方式使用更复杂的查询:

import { createConnection } from "typeorm";
import { Photo } from "./entity/Photo";
import { PhotoMetadata } from "./entity/PhotoMetadata";

createConnection(/*...*/)
  .then(async connection => {
    /*...*/
    let photos = await connection
      .getRepository(Photo)
      .createQueryBuilder("photo")
      .innerJoinAndSelect("photo.metadata", "metadata")
      .getMany();
  })
  .catch(error => console.log(error));

QueryBuilder允许创建和执行几乎任何复杂性的 SQL 查询。使用QueryBuilder时,请考虑创建 SQL 查询。在此示例中,“photo”和”metadata“是应用于所选 photos 的 ​​ 别名。你可以使用别名来访问所选数据的列和属性。