doctrine-orm - Doctrine ORM 实体类名返回代理类名

标签 doctrine-orm proxy-classes

我当前正在检索实体的类名,以将更改保存到日志中。这发生在监听器中:

在我的服务层:

$product = $line->getProduct();

$product->setAvailability($product->getAvailability() - $line->getAmount());
$em->persist($product);

问题是通过在监听器中执行以下操作:

$className = join('', array_slice(explode('\\', get_class($entity)), -1));
$modification->setEntidad($className);

设置到修改中的$classNamemomioBundleEntityProductoProxy

如何获取实体的真实类名,而不是代理类名?

最佳答案

由于代理类总是从真实实体类扩展而来:

class <proxyShortClassName> extends \<className> implements \<baseProxyInterface>

那么,你可以通过 class_parents() 获取它功能:

if ($entity instanceof \Doctrine\Common\Proxy\Proxy) {
    $class = current(class_parents($entity)); // get real class
}

当您无权访问 EntityManager 实例时特别有用。

关于doctrine-orm - Doctrine ORM 实体类名返回代理类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15476210/

相关文章:

jquery-ui - Doctrine2 可排序更新位置

mysql - 如何设计 Doctrine 2 实体

php - 使用 ZF2 和 Doctrine2 将 SQL Server 表转换为 MySQL

go - golang 中的包装器(代理)

mysql - 在表中插入行时的外键约束

symfony - 在 Symfony2 中访问关联实体的值的最佳实践是什么?

java - 返回 List<WebElements> 周围的代理

php - 在运行时在php中动态生成类?

c# - 使用延迟加载的 NHibernate ObjectProxy 转换

java - hibernate 代理生成