I’ve a Entity with @HasLifecycleCallbacks for define prePersist and preUpdate method.
My PrePersist method is
JavaScript
x
/**
* @ORMOneToMany(targetEntity="Field", mappedBy="service", cascade={"persist"}, orphanRemoval=true)
*/
protected $fields;
/**
* @PrePersist()
*/
public function populate() {
$fieldsCollection = new DoctrineCommonCollectionsArrayCollection();
$fields = array();
preg_match_all('/%[a-z]+%/', $this->getPattern(), $fields);
if (isset($fields[0])) {
foreach ($fields[0] as $field_name) {
$field = new Field();
$field->setField($field_name);
$field->setService($this);
$fieldsCollection->add($field);
}
$this->setFields($fieldsCollection);
}
}
I hoped that this could persist my Field entities, but my table is empty. Should I use an EntityManager? How can I retrieve it within my Entity?
Advertisement
Answer
You need to use the LifecycleEventArgs to get EntityManager and be able to persist Entity in prePersist method. You can retrieve it like that :
JavaScript
<?php
use DoctrineCommonPersistenceEventLifecycleEventArgs;
class MyEventListener
{
public function preUpdate(LifecycleEventArgs $args)
{
$entity = $args->getObject();
$entityManager = $args->getObjectManager();
// perhaps you only want to act on some "Product" entity
if ($entity instanceof Product)
{
// do something with the Product
}
}
}