#php #doctrine-orm #callback #annotations #persistence
#php #doctrine-orm #обратный вызов #аннотации #сохранение
Вопрос:
У меня есть сущность с @HasLifecycleCallbacks для определения метода prePersist и preUpdate.
Мой метод prePersist
/**
* @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);
}
}
Я надеялся, что это может сохранить мои объекты полей, но моя таблица пуста.
Должен ли я использовать EntityManager? Как я могу получить ее в своей сущности?
Ответ №1:
Вам нужно использовать LifecycleEventArgs, чтобы получить EntityManager и иметь возможность сохранять сущность в методе prePersist. Вы можете получить его таким образом :
<?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
}
}
}