找不到别名。也许你忘了加入它
alias was not found. Maybe you forget to join it
在我的 nectjs 项目中,我使用的是 TypeORM,我有 2 个实体用户和 post,
我想在他们之间建立关系
user.entity.ts
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 50, unique: true })
name: string;
@OneToMany(type => Post, post => post.user)
posts: Post[];
}
post.entity.ts
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 30 })
title: string;
@ManyToOne(type => User, user => user.posts)
user: User;
}
所以我想加入这些表并根据特定用户的标题获得post
const PostObject = await createQueryBuilder("post")
.leftJoinAndSelect(
"post.user",
"user",
"post.title = :title",
{ title: "title1" }
)
.where("user.id = :id", { id: id })
.getOne();
但是当我 运行 项目并执行这个函数时我得到这个错误:
Error: "post" alias was not found. Maybe you forget to join it?
您必须先注入 Repository
:
constructor(
@InjectRepository(Post) private readonly postRepository: Repository<Post>
) {
}
然后您可以通过传入别名为 Post
实体创建 QueryBuilder
:
this.postRepository.createQueryBuilder('post')
// ^^^^^^^^^^^^^^^^
.leftJoinAndSelect(
'post.user',
'user',
'post.title = :title',
{ title: 'title1' },
)
.where('user.id = :id', { id })
.getOne();
也可以像下面这样使用 getRepository。
const PostObject = await getRepository("post").createQueryBuilder("post")
.leftJoinAndSelect(
"post.user",
"user",
"post.title = :title",
{ title: "title1" }
)
.where("user.id = :id", { id: id })
.getOne();
在我的 nectjs 项目中,我使用的是 TypeORM,我有 2 个实体用户和 post, 我想在他们之间建立关系
user.entity.ts
@Entity()
export class User {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 50, unique: true })
name: string;
@OneToMany(type => Post, post => post.user)
posts: Post[];
}
post.entity.ts
@Entity()
export class Post {
@PrimaryGeneratedColumn()
id: number;
@Column({ length: 30 })
title: string;
@ManyToOne(type => User, user => user.posts)
user: User;
}
所以我想加入这些表并根据特定用户的标题获得post
const PostObject = await createQueryBuilder("post")
.leftJoinAndSelect(
"post.user",
"user",
"post.title = :title",
{ title: "title1" }
)
.where("user.id = :id", { id: id })
.getOne();
但是当我 运行 项目并执行这个函数时我得到这个错误:
Error: "post" alias was not found. Maybe you forget to join it?
您必须先注入 Repository
:
constructor(
@InjectRepository(Post) private readonly postRepository: Repository<Post>
) {
}
然后您可以通过传入别名为 Post
实体创建 QueryBuilder
:
this.postRepository.createQueryBuilder('post')
// ^^^^^^^^^^^^^^^^
.leftJoinAndSelect(
'post.user',
'user',
'post.title = :title',
{ title: 'title1' },
)
.where('user.id = :id', { id })
.getOne();
也可以像下面这样使用 getRepository。
const PostObject = await getRepository("post").createQueryBuilder("post")
.leftJoinAndSelect(
"post.user",
"user",
"post.title = :title",
{ title: "title1" }
)
.where("user.id = :id", { id: id })
.getOne();