不推荐使用参数调用 Doctrine clear()
Calling Doctrine clear() with an argument is deprecated
学说建议-
Calling Doctrine\ORM\EntityManager::clear() with any arguments to
clear specific entities is deprecated since doctrine/persistence 1.3 and will be removed in 2.0.
我们的 Symfony 代码库中有很多对 ->clear(SpecificEntity::class)
的引用,并且正在寻求更新这些,但我们正在努力在最新的 upgrade guide.[=13 中找到建议的替代品=]
是否有推荐的替代方案来清除最新版本的 Doctrine 中的特定实体?
调用 clear($entity)
有一些副作用和不明确的行为,例如那个实体的关系 in/to 会怎样?这个想法是,你的工作单元(Doctrine 跟踪内存中的变化,直到你刷新)应该很小并且只包含你想要改变的实体,以避免正在发生的事情的不确定性saved/cleared。而不是取出实体,它首先不应该在那里。相反,它可以例如获得自己的 flush-"cycle",然后清除整个工作单元,以表明这些更改独立于其他更改。
有多种方法可以做到这一点,最常见的(我认为)是:
更频繁地使用 clear()
(没有特定实体)。
这可能需要您确保对实体的所有更改都紧密地组合在一起,以确保不会意外写入其他实体。您可能还必须更频繁地重新读取数据。为了抵消这一点,你应该使用二级缓存。
使用不同的更改跟踪策略
默认情况下,所有更改都会被隐式跟踪然后持久化。相反,您可以告诉 Doctrine 只写显式更改。这意味着,例如,当您有一个具有多个地址的用户并且您只调用 persist($user)
时,相关的地址更改将不会被保存。相反,您必须手动调用 persist 应保存的每个地址。您不必经常调用 clear,因为您明确说明应该保留哪些实体更改。
这两个选项都需要您重新组织您的业务逻辑,这使得很难为此提供一般的升级指南。一般来说,原因和解决方案与 flush($entity)
的描述非常相似,它在文档中有部分:https://github.com/doctrine/orm/blob/master/UPGRADE.md#bc-break-removed-entitymanagerflushentity-and-entitymanagerflushentities
学说建议-
Calling Doctrine\ORM\EntityManager::clear() with any arguments to clear specific entities is deprecated since doctrine/persistence 1.3 and will be removed in 2.0.
我们的 Symfony 代码库中有很多对 ->clear(SpecificEntity::class)
的引用,并且正在寻求更新这些,但我们正在努力在最新的 upgrade guide.[=13 中找到建议的替代品=]
是否有推荐的替代方案来清除最新版本的 Doctrine 中的特定实体?
调用 clear($entity)
有一些副作用和不明确的行为,例如那个实体的关系 in/to 会怎样?这个想法是,你的工作单元(Doctrine 跟踪内存中的变化,直到你刷新)应该很小并且只包含你想要改变的实体,以避免正在发生的事情的不确定性saved/cleared。而不是取出实体,它首先不应该在那里。相反,它可以例如获得自己的 flush-"cycle",然后清除整个工作单元,以表明这些更改独立于其他更改。
有多种方法可以做到这一点,最常见的(我认为)是:
更频繁地使用 clear()
(没有特定实体)。
这可能需要您确保对实体的所有更改都紧密地组合在一起,以确保不会意外写入其他实体。您可能还必须更频繁地重新读取数据。为了抵消这一点,你应该使用二级缓存。
使用不同的更改跟踪策略
默认情况下,所有更改都会被隐式跟踪然后持久化。相反,您可以告诉 Doctrine 只写显式更改。这意味着,例如,当您有一个具有多个地址的用户并且您只调用 persist($user)
时,相关的地址更改将不会被保存。相反,您必须手动调用 persist 应保存的每个地址。您不必经常调用 clear,因为您明确说明应该保留哪些实体更改。
这两个选项都需要您重新组织您的业务逻辑,这使得很难为此提供一般的升级指南。一般来说,原因和解决方案与 flush($entity)
的描述非常相似,它在文档中有部分:https://github.com/doctrine/orm/blob/master/UPGRADE.md#bc-break-removed-entitymanagerflushentity-and-entitymanagerflushentities