Я не могу заставить работать аннотации ORM, чтобы UUID автоматически генерировался в MySQL после сброса новой сущности, добавленной в таблицу. Вот мой код:
Организация:
/**
* @ORM\Column(type="guid")
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
protected $id;
В моем контроллере:
/**
* @RestRoute\Post("")
* @RestRoute\Post("/")
*/
public function createAction($version, Request $request)
{
$res = $this->getManager()->createFromData(
(array) $request->request->all()
);
if ($res) {
return new JsonResponse($request->request->all());
}
}
А у меня в сервисе / менеджер
/**
* Adds a new record to the entity table
*
* @param CwPackageType $data
* @return CwPackageType the newly created entity
* @throws Exception throws database/doctrine exception
*/
public function createFromData($data)
{
$this->getEntityManager()->getConnection()->beginTransaction();
try {
$rec = (new CwPackageType())->createFromData($data);
$this->getEntityManager()->persist($rec);
$this->getEntityManager()->flush($rec);
$this->getEntityManager()->getConnection()->commit($rec);
return $rec;
} catch (Exception $e) {
$this->getEntityManager()->getConnection()->rollback();
throw $e;
}
}
Когда запись добавляется в таблицу, поле идентификатора остается пустым или пустым. Если я установил режим STRICT_TRANS_TABLES в MySQL, я получаю сообщение об ошибке при попытке добавить запись в базу данных:
General error: 1364 Field 'id' doesn't have a default value
Без этого режима запись добавляется, но UUID имеет значение null / blank
Обратите внимание, что если я использую следующую аннотацию, автоматически сгенерированный идентификатор будет правильно создан и сохранен в поле идентификатора в таблице
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
Что я делаю не так?