是否可以处理 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 ORM Association映射两列

带有消息的 Doctrine MappingException '目标实体 Entity\\ItemsBags 无法在 'Entity\\Players#itemsBag' 中找到