用途:处理无法一次性装入内存的大量数据行,例如导入、导出、回填;当命令或 worker 遍历实体时内存耗尽,或需要一次性更新、删除大量行,或通过 Doctrine/DBAL 大批量插入时使用。
主要能力与默认流程:先测量数据集大小与进程内存预算;用 toIterable() 流式读取,超大表按 id 分页(id > :lastId);每 N 条执行 flush 并 clear(),clear 后重新获取所需对象;无需水合的批量写入使用 DQL UPDATE/DELETE 或 DBAL;记录内存占用与进度,并让运行可恢复。
限制与护栏:不要在会增长的表上使用 findAll();clear() 之前加载的实体已分离,不可再修改或持久化;批量 DQL 与 DBAL 会跳过生命周期事件和监听器,需确认哪些逻辑依赖它们;ORM 3 中 Query#iterate() 和 setSQLLogger() 已移除,改用 toIterable() 和日志中间件;按 id 分页而非 offset,offset 会变慢并在数据变动时跳过行。
输出约定:给出带明确批大小和 clear 点的批处理循环;为每种写入说明选择 ORM、DQL 批量还是 DBAL 及理由;在真实数据量下测量前后内存。更多实现细节见 reference.md。