【问题标题】:Explain typeorm join syntax解释 typeorm 连接语法
【发布时间】:2021-03-01 23:57:07
【问题描述】:

我是 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'

有人可以更详细地解释一下它是如何工作的,例如,我不知道 first("user") 指的是什么,我的意思是,它是一个列吗?如果我需要它会如何改变在列之间使用它? 另外,innerJoinAndSelect 的解释是什么,为什么它有 3 个值,TypeOrm 语法中的值是如何定义的? 当它使用 :name 并且在 {name: "Timber"} 之后,该对象正在定义 :name?,如果我不想只得到一个并且我想从匹配的 table1 中获取所有信息,最后会发生什么使用 table2,因为实际上这就是我想要做的。

【问题讨论】:

    标签: typeorm


    【解决方案1】:

    第一个问题 createQueryBuilder 的参数在您的情况下是 user,它是您在查询中使用的别名:

    选择用户。,照片。 FROM users user INNER JOIN 照片 photo ON photo.user = user.id AND photo.isRemoved = FALSE WHERE 用户.name = 'Timber'

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

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

    第四个问题,你应该使用getMany()而不是getOne();

    第三个问题我没看懂。

    【讨论】:

      猜你喜欢
      • 2018-12-18
      • 2021-04-18
      • 2019-08-13
      • 1970-01-01
      • 2013-07-06
      • 1970-01-01
      • 1970-01-01
      • 2021-09-04
      • 2019-08-02
      相关资源
      最近更新 更多