如何从我的 ArrayCollection 获取数据?

pea*_*ove -1 php doctrine arraycollection symfony

我正在尝试通过学说从我的数组集合中加载数据:

 $pages = $this->em->getRepository(Pages::class)->findAll();
Run Code Online (Sandbox Code Playgroud)

结果是:

2 => Pages^ {#1598 ?
-id: 3
-name: "cat"
-membergroup: PersistentCollection^ {#1603 ?
  -snapshot: []
  -owner: Pages^ {#1598}
  -association: array:16 [ …16]
  -em: EntityManager^ {#278 …11}
  -backRefFieldName: "pages"
  -typeClass: ClassMetadata {#693 …}
  -isDirty: false
  #collection: ArrayCollection^ {#1604 ?
    -elements: []
  }
  #initialized: false
}
Run Code Online (Sandbox Code Playgroud)

}

问题是,我希望成员组 ArrayCollection 中有一个元素。但它是空的。

Flo*_*ann 5

这与 Doctrine 的工作方式有关。如果您使用 findAll(),您的集合将被延迟加载。如果您尝试遍历集合并访问元素,您将看到它不为空!

然而,延迟加载的集合通常不是一个好主意,因为它会导致大量的 SQL 查询。有几种方法可以解决这个问题,但这与问题无关。例如,您可以在存储库中进行自己的查询以避免这种情况。

这被称为 N+1 问题,它是所有 ORM 的常见问题

  • 你已经接近答案了!只需添加一个 ->addSelect('m') 就可以了。 (3认同)