Я переключаюсь на Ramsey \ Uuid и не знаю, каков предполагаемый способ создания Uuids.
Либо , как показано в примерах с аннотацией:
/**
* @var UuidInterface
*
* @ORM\Id
* @ORM\Column(type="uuid", unique=true)
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class="Ramsey\Uuid\Doctrine\UuidGenerator")
*/
private $id;
public function __construct() {
}
Или вручную в конструкторе:
/**
* @var UuidInterface
*
* @ORM\Id
* @ORM\Column(type="uuid", unique=true)
*/
private $id;
public function __construct() {
$this->id = Uuid::uuid4();
}
Во втором случае я не понимаю, как существующий идентификатор будет установлен во время гидратации. Я добавил общедоступный сеттер для тестирования, но он не называется! В моем понимании, при загрузке из db создается новый объект, который выполняет конструктор и, следовательно, устанавливает новый uuid. Тогда каким-то образом этот uuid должен быть заменен на тот, что из записи базы данных. Я что-то упустил?
Однако большое преимущество в том, что идентификатор доступен сразу , исчезает при использовании аннотации, поскольку генерация происходит только при вызове $em->persist(...)
.
Существуют также варианты, когда конструктор принимает необязательный аргумент uuid и использует его, если не ноль.