【发布时间】: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