如何从 Typeorm 中的连接实体中仅选择单个/多个字段

Dev*_*AKS 11 database orm typescript typeorm

根据 TypeOrm 文档:https://github.com/typeorm/typeorm/blob/master/docs/select-query-builder.md#joining-relations

我们可以查询连接实体的字段,该字段会将其所有字段填充到响应中。我不知道如何限制仅少数选定的字段(单个/多个),我尝试添加“select([])”,但它在生成的 SQL 查询中不起作用,我可以看到它正在查询所有字段。

代码:

import {Entity, PrimaryGeneratedColumn, Column, OneToMany} from "typeorm";
import {Photo} from "./Photo";

@Entity()
export class User {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    name: string;

    @OneToMany(type => Photo, photo => photo.user)
    photos: Photo[];
}
import {Entity, PrimaryGeneratedColumn, Column, ManyToOne} from "typeorm";
import {User} from "./User";

@Entity()
export class Photo {

    @PrimaryGeneratedColumn()
    id: number;

    @Column()
    url: string;

    @Column()
    alt: string;

    @ManyToOne(type => User, user => user.photos)
    user: User;
}
Run Code Online (Sandbox Code Playgroud)

并在代码上:

const user = await createQueryBuilder("user")
    .leftJoinAndSelect("user.photos", "photo")
    .where("user.name = :name", { name: "Timber" })
    .getOne();
Run Code Online (Sandbox Code Playgroud)

上面的代码给出的输出为 -

{
    id: 1,
    name: "Timber",
    photos: [{
        id: 1,
        url: "me-with-chakram.jpg",
        alt: "Me With Chakram"
    }, {
        id: 2,
        url: "me-with-trees.jpg",
        alt: "Me With Trees"
    }]
}
Run Code Online (Sandbox Code Playgroud)

有没有办法只查询“url”和“alt”,这样输出看起来像这样 -

{
    id: 1,
    name: "Timber",
    photos: [{
        url: "me-with-chakram.jpg",
        alt: "Me With Chakram"
    }, {
        url: "me-with-trees.jpg",
        alt: "Me With Trees"
    }]
}
Run Code Online (Sandbox Code Playgroud)

Art*_*sky 11

const user = await createQueryBuilder("user")
    .leftJoinAndSelect("user.photos", "photo")
    .select(['user', 'photo.url', 'photo.alt'])
    .where("user.name = :name", { name: "Timber" })
    .getOne();
Run Code Online (Sandbox Code Playgroud)

或者

const user = await createQueryBuilder("user")
    .leftJoinAndSelect("user.photos", "photo")
    .addSelect(['photo.url', 'photo.alt'])
    .where("user.name = :name", { name: "Timber" })
    .getOne();
Run Code Online (Sandbox Code Playgroud)

(不确定第二个)