首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从Typeorm中的联接实体中仅选择单个/多个字段

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

Stack Overflow用户
提问于 2020-10-08 18:26:08
回答 2查看 9.8K关注 0票数 5

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

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

代码:

代码语言:javascript
复制
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;
}

在代码中:

代码语言:javascript
复制
const user = await createQueryBuilder("user")
    .leftJoinAndSelect("user.photos", "photo")
    .where("user.name = :name", { name: "Timber" })
    .getOne();

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

代码语言:javascript
复制
{
    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"
    }]
}

有没有办法我只能查询'url‘和'alt’,这样输出就会像这样--

代码语言:javascript
复制
{
    id: 1,
    name: "Timber",
    photos: [{
        url: "me-with-chakram.jpg",
        alt: "Me With Chakram"
    }, {
        url: "me-with-trees.jpg",
        alt: "Me With Trees"
    }]
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-09 00:44:00

代码语言:javascript
复制
const user = await createQueryBuilder("user")
    .leftJoinAndSelect("user.photos", "photo")
    .select(['user', 'photo.url', 'photo.alt'])
    .where("user.name = :name", { name: "Timber" })
    .getOne();

代码语言:javascript
复制
const user = await createQueryBuilder("user")
    .leftJoinAndSelect("user.photos", "photo")
    .addSelect(['photo.url', 'photo.alt'])
    .where("user.name = :name", { name: "Timber" })
    .getOne();

(对第二个不太确定)

票数 5
EN

Stack Overflow用户

发布于 2021-11-04 18:31:31

Art Olshansky给出的第一个答案是正确的(第二个答案不是),所以,你必须站在“基本”实体上,但是,如果你不需要所有/任何用户字段,你可以直接应用

代码语言:javascript
复制
const user = await createQueryBuilder("user")
    .leftJoinAndSelect("user.photos", "photo")
    .select(['user.id', 'photo.url', 'photo.alt'])
    .where("user.name = :name", { name: "Timber" })
    .getOne();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64260584

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档