是否可以处理 Doctrine Entity 的多个状态?
Posted
技术标签:
【中文标题】是否可以处理 Doctrine Entity 的多个状态?【英文标题】:Is it possible to deal with multiple states of a Doctrine Entity? 【发布时间】:2017-03-13 17:13:17 【问题描述】:在 Symfony 3 项目中,我尝试使用 Doctrine ORM 来使用实体的多个状态。
当通过数据库导入 XML 文件(已经来自此 XML 文件的先前版本)时,我需要将实体的两种状态并排进行比较:
实体的 DB 状态版本 已合并但尚未持久化的实体版本类似这样的:
$DB_state_entity;
$not_persisted_entity;
if( $DB_state_entity->isSomething() && $not_persisted_entity->isSomethingElse() )
// Do something
有没有办法用 Doctrine 实现这种事情?
多个 EntityManager 似乎不是为此而设计的。
编辑:
阅读@Honza Rydrych 的回答后,我通过EntityManager::createNativeQuery 在数据库中请求所需的属性,从而实现了我的目标。
A 可以将合并值与 DB 值进行比较。
【问题讨论】:
【参考方案1】:AFAIK 访问实体状态的方式如上所述是不可能的。
但我没明白你为什么要那样做?您可以将 XML 文件中的数据导入临时对象,进行比较,更新原始实体并将其持久化。该应用程序将在内存中有一个实体和临时对象,但您的方案在内存中也会有两个“独立”对象。
【讨论】:
感谢您的回复。我想这样做是因为我的实体中有包含 ID 的属性,它们不是 XML 的一部分,并且我无法从原始 XML 中检索这些信息。我正在使用 JMS Serializer 和 Doctrine EntityManager::merge() 来重新计算这些信息。不过还是谢谢你。我会考虑改变我的方法。以上是关于是否可以处理 Doctrine Entity 的多个状态?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法从 Doctrine 2.2 实体中获取 FK 列值?
没有要处理的元数据类。 php bin / console doctrine:schema:update --force
类中的教义注释“@Doctrine\ORM\Annotation\Entity”不存在或无法自动加载
带有消息的 Doctrine MappingException '目标实体 Entity\\ItemsBags 无法在 'Entity\\Players#itemsBag' 中找到