Symfony2: Пользовательский идентификатор в сущностях Sonata

У меня есть объект с пользовательским идентификатором (т. Е. UUID), сгенерированный в функции __construct.

namespace AppBundle\Entity;
use Rhumsaa\Uuid\Uuid;
use Doctrine\ORM\Mapping as ORM;

/**
* @ORM\Entity
*/
class Person
{
/**
* @ORM\Id
* @ORM\Column(type="string")
*/
private $id;

/**
* @ORM\Column(type="string")
*/
private $name;

public function __construct()
{
$this->id = Uuid::uuid4()->toString();
}

Эта сущность используется в сонате, а также в другой части проекта. Мне нужно, чтобы у этой сущности был идентификатор перед сохранением и сбросом, поэтому я не могу использовать автоинкремент.

Итак, проблема в том, что соната не позволяет мне создавать сущности, потому что она принимает опцию создания и редактирования при выполнении, потому что у этой сущности уже есть идентификатор, но в данный момент эта сущность не существует, поэтому она терпит неудачу.

Проблема не в библиотеке для генерации UUID, любое значение для id не выполняется.

Кто-нибудь знает, как это решить? Еще один подобный подход к решению проблемы?

1

Решение

Вы не должны устанавливать свой идентификатор в конструкторе, а использовать prePersist Doctrine событие, чтобы изменить вашу сущность, прежде чем сохранить ее в первый раз.

Вы можете использовать аннотации для этого, см. Учение Документация на ПреПерсист.

Проблема с установкой идентификатора в конструкторе заключается в том, что вы можете переопределить его при извлечении из базы данных, и в этом случае он будет неверным.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]