Генерация Uuid вручную в конструкторе или с помощью аннотации UuidGenerator - PullRequest
0 голосов
/ 29 октября 2018

Я переключаюсь на 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 и использует его, если не ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...