• 取出关系对象的数据

    取出关系对象的数据

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

    1. import { createConnection } from "typeorm";
    2. import { Photo } from "./entity/Photo";
    3. import { PhotoMetadata } from "./entity/PhotoMetadata";
    4. createConnection(/*...*/)
    5. .then(async connection => {
    6. /*...*/
    7. let photoRepository = connection.getRepository(Photo);
    8. let photos = await photoRepository.find({ relations: ["metadata"] });
    9. })
    10. .catch(error => console.log(error));

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

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

    1. import { createConnection } from "typeorm";
    2. import { Photo } from "./entity/Photo";
    3. import { PhotoMetadata } from "./entity/PhotoMetadata";
    4. createConnection(/*...*/)
    5. .then(async connection => {
    6. /*...*/
    7. let photos = await connection
    8. .getRepository(Photo)
    9. .createQueryBuilder("photo")
    10. .innerJoinAndSelect("photo.metadata", "metadata")
    11. .getMany();
    12. })
    13. .catch(error => console.log(error));

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