У меня есть объект с пользовательским идентификатором (т. Е. 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 не выполняется.
Кто-нибудь знает, как это решить? Еще один подобный подход к решению проблемы?
Вы не должны устанавливать свой идентификатор в конструкторе, а использовать prePersist
Doctrine событие, чтобы изменить вашу сущность, прежде чем сохранить ее в первый раз.
Вы можете использовать аннотации для этого, см. Учение Документация на ПреПерсист.
Проблема с установкой идентификатора в конструкторе заключается в том, что вы можете переопределить его при извлечении из базы данных, и в этом случае он будет неверным.
Других решений пока нет …