取出关系对象的数据
在一个查询中加载 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 的 别名。你可以使用别名来访问所选数据的列和属性。