如何在postRemove事件期间获取实体的对象ID?

时间:2019-09-18 09:58:02

标签: php symfony doctrine-orm doctrine

我有这样的东西:

public function postRemove(LifecycleEventArgs $args)
{
    $entity = $args->getObject();
    $entity->getId();
}

$entity具有所选表中的每个属性,但id始终为null

我希望它具有我要删除的商品的ID。

2 个答案:

答案 0 :(得分:4)

如果您已经删除了该对象,则该对象不再具有ID。

您可能想在preRemove仍然可用的地方使用id

您甚至可以使用preRemove将ID存储在对象的非映射属性中,然后从postRemove上的对象中获取该ID。

function preRemove(LifecycleEventArgs $args) {
   $object = $args->getObject();
   $object->storeId($object->getId());
}
function postRemove(LifecycleEventArgs $args) {
   $object = $args->getObject();
   $id     = $object->getStoredId();
}

答案 1 :(得分:1)

服务在Symfony中是单例的。您可以像使用代理一样使用它们。 在侦听器中创建属性$objectId。然后按照以下步骤操作:

function preRemove(LifecycleEventArgs $args) {
   $object = $args->getEntity();
   $this->objectId($object->getId());
}

然后在postRemove中

function postRemove(LifecycleEventArgs $args) {
   $id     = $this->objectId;
}