我正在使用 Doctrine 2 作为我的 ORM,一切进展顺利,但我一直想知道 EntityManager#persist() 方法。 "Persisting entities" 文档说明了以下关于为对象 persist() 调用 X 的内容:



这让我相信 persist() 只需要在对象是新的并且尚未保存到数据库时调用。但是,"Deferred Explicit" change tracking policy 的文档说:



...听起来像 persist() 必须在对象上调用才能完全更新。什么时候应该调用 persist()?如果仅在新对象上,无论何时更新实体并让 Doctrine 找出差异,调用它是否会显着影响性能?

最佳答案

使用 Deferred Explicit policy(这不是默认策略),您需要在每个修改后的实体上显式调用 persist() 以让学说持久化它们。 (级联持久关联除外。)

Doctrine 仍然需要将每个属性的新值与原始值进行比较以知道要更新哪个属性,因此如果您 persist() 太多实体,这可能会影响性能。

使用 default change tracking policy,您只需要在尚未由 Doctrine 管理的实体(您使用 new 创建的实体)上调用 persist 。使用此策略,当您调用 flush() 原则会自动检测哪些实体已更新并需要持久化。

关于php - 知道什么时候调用persist,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7262934/

10-12 16:26