我有这样的东西:
public function postRemove(LifecycleEventArgs $args)
{
$entity = $args->getObject();
$entity->getId();
}
$entity
具有所选表中除 id 之外的所有属性,id 始终为 null
我希望它具有我要删除的项目的 ID。
如果您已经删除了该对象,则它不再有 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();
}
Symfony 中的服务是单例的。您可以像代理一样使用它们。 在侦听器中创建属性
$objectId
。然后按照以下步骤操作:
function preRemove(LifecycleEventArgs $args) {
$object = $args->getEntity();
$this->objectId($object->getId());
}
然后在帖子中删除:
function postRemove(LifecycleEventArgs $args) {
$id = $this->objectId;
}
使用动态属性将在 PHP 8.2 中被弃用,并会在 PHP 9.0 中引发错误。
参考:https://github.com/doctrine/orm/issues/2326#issuecomment-969057626
通过这种方式使用特征可以很方便。
trait StoreIdAfterDeletionEntity
{
private ?int $storedId;
public function getStoredId(): ?int
{
return $this->storedId;
}
#[ORM\PreRemove]
public function setStoredId(): static
{
$this->storedId = $this->getId();
return $this;
}
}
#[ORM\Entity]
#[ORM\HasLifecycleCallbacks]
class MyEntity
{
use StoreIdAfterDeletionEntity;
}