在 TypeORM 中使用 'eager:true' 选项的含义

Meaning of using 'eager:true' option in TypeORM

我一直在使用 TypeORM,但在推送数据时遇到了一些问题,如下所示:

当我尝试 Create Post 时:

正如我在上面标记的 PROBLEM,当我请求这个时,我得到 Cannot call method 'push of undefined 错误。

但幸运的是,我可以通过在 User.ts 文件中添加以下选项来解决这个问题:

@OneToMany(type => Post, post => post.user, {
  // -------------- added --------------
  eager: true
  // -----------------------------------
})
posts: Post[]

我想知道为什么会这样...我已经阅读了关于 Eager 的 typeorm 文档,它说

Eager relations only work when you use find* methods. If you use QueryBuilder eager relations are disabled and have to use leftJoinAndSelect to load the relation. Eager relations can only be used on one side of the relationship, using eager: true on both sides of relationship is disallowed.

但是我不太清楚最后一句是什么意思。

eager: true on both sides of relationship is disallowed.

所以,我已经不允许 UserPost 之间的关系,现在文件可以理解 user.posts 被定义了吗?

有人可以帮我解决这个问题吗...?

Eager Loading Documentaion 中所述,您只能在关系的一侧设置 eager: true。这意味着您已经定义了如下关系。

User.ts

@OneToMany(type => Post, post => post.user, { eager: true })
posts: Post[]

并在 Post.ts

@ManyToOne(type => User, user => user.posts)
user: User

在这里,如果您在将自动加载 Post 关系的函数中使用 await User.findOne({ uid: ctx.uid })。这并不意味着您不能使用反之亦然的关系。从 PostUser 关系,您仍然可以使用 leftJoinAndSelect.

加载关系