解释 typeorm 连接语法

问题描述 投票:0回答:1

我是 TypeOrm 的新手,我正在尝试使用内部联接,但文档没有解释它,所以我有一个例子:

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;

    @ManyToOne(type => User, user => user.photos)
    user: User;
}

如果您想使用 INNER JOIN 而不是 LEFT JOIN,只需使用

innerJoinAndSelect
即可:

const user = await createQueryBuilder("user")
    .innerJoinAndSelect("user.photos", "photo", "photo.isRemoved = :isRemoved", { isRemoved: false })
    .where("user.name = :name", { name: "Timber" })
    .getOne();

这将生成:

SELECT user.*, photo.* FROM users user
    INNER JOIN photos photo ON photo.user = user.id AND photo.isRemoved = FALSE
    WHERE user.name = 'Timber'

有人可以更详细地向我解释它是如何运作的吗?例如,我不知道第一个(“用户”)指的是什么,我的意思是,它是一列吗?如果我需要在列之间使用它,它会如何变化? 另外,

innerJoinAndSelect
的解释是什么,为什么它有3个值,TypeORM语法中的值是如何定义的? 当它使用 :name 并在 {name: "Timber"} 之后,该对象正在定义 :name?,最后如果我不想只获取一个并且我想从 table1 获取所有信息,会发生什么与 table2 匹配,因为实际上这就是我想做的。

typeorm
1个回答
2
投票

对于第一个问题 createQueryBuilder 的参数在您的情况下是

user
,它是您在查询中使用的别名:

选择用户。,照片。来自用户用户 INNER JOIN 照片 照片 ON photo.user = user.id AND photo.isRemoved = FALSE 哪里 user.name = 'Timber'

const user =等待createQueryBuilder(“user”) .innerJoinAndSelect("user.photos", "照片", "photo.isRemoved = :isRemoved", { isRemoved: false }) .where("user.name = :name", { name: "Timber" }) .getOne();

第二个问题:第一个参数是您要加载的关系,第二个参数是您分配给该关系表的别名,第三个参数对于您添加的任何条件都是可选的

第四个问题,你应该使用

getMany()
而不是
getOne();

我没听懂第三个问题。

© www.soinside.com 2019 - 2024. All rights reserved.