我正试图通过doctrine从我的数组集合中加载数据。
$pages = $this->em->getRepository(Pages::class)->findAll();
结果是:
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
}
}
问题是,我希望成员组ArrayCollection中有一个元素。但它是空的。
这与教义学的运作方式有关。如果你使用findAll(),你的集合将被懒惰加载。如果你试着在集合上迭代并访问元素,你会发现它不是空的!
然而,懒惰加载的集合往往不是一个好主意,因为它会导致大量的SQL查询。有几种方法可以解决这个问题,但这与问题无关。例如,你可以在仓库中自己做查询来避免这种情况。
这就是所谓的N+1问题,它是所有ORM的共同问题。