php - 如何从我的 ArrayCollection 中获取数据?
问题描述
我正在尝试通过学说从我的数组集合中加载数据:
$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 中有一个元素。但它是空的。
解决方案
这与 Doctrine 的运作方式有关。如果您使用 findAll(),您的集合将被延迟加载。如果您尝试遍历集合并访问元素,您将看到它不是空的!
然而,延迟加载的集合通常不是一个好主意,因为它会导致大量的 SQL 查询。有几种方法可以解决这个问题,但这与问题无关。例如,您可以在存储库中进行自己的查询以避免这种情况。
这被称为 N+1 问题,它是所有 ORM 的常见问题
推荐阅读
- android - 回调方法 onLocationChanged() 不适用于视图模型
- c# - 如何使用 Modulus % 正确计算?C# 控制台应用程序
- python - 一旦值大于 xy,标记所有后续行
- php - Laravel 本地化抛出 htmlspecialchars() 错误
- c# - 传递给具有更高接口类型的方法时,显式接口实现不起作用
- matlab - 在 MATLAB 的球体上画一个圆
- vba - 如何替换单词表 chr(13)?
- android - “kotlin-android”和“org.jetbrains.kotlin.android”是一样的吗?
- laravel - Laravel firstOrNew 基于 created_at 同一日期
- iphone - 在 ios 移动设备上登录事件之前调用的默认后备意图