解释类型连接语法



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

谁能更详细地给我解释一下它是如何工作的,例如,我不知道第一个("user")指的是什么,我的意思是,它是一个列吗?如果我需要在列之间使用它,它会如何变化?此外,innerJoinAndSelect的解释是什么,为什么它有3个值,如何在TypeOrm语法中定义值?当它在{name: "Timber"}之后使用:name时,该对象定义了:name?最后,如果我不想只获取一个,我想从table1中获取所有与table2匹配的信息,因为这就是我想要做的。

第一个问题createQueryBuilder的参数在你的例子中是user,它是你在查询中使用的别名:

选择用户。,照片。FROM usersuserINNER JOIN photos photo ON photo。user =user.id和照片。isRemoved = FALSE其中用户.name = 'Timber'

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

.getOne ();

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

第四个问题,你应该用getMany()代替getOne();

我不明白第三个问题。

最新更新