我无法让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;
}
}
将记录添加到表中时,id字段保留为null/空白。如果我在mysql上设置了strict\u trans\u tables模式,那么在尝试将记录添加到数据库时会出现错误:
General error: 1364 Field 'id' doesn't have a default value
如果没有该模式,则会添加记录,但uuid为null/空白
另外请注意,如果使用以下注解,则自动生成的id将正确创建并存储在表的id字段中
/**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/
我做错什么了?
1条答案
按热度按时间zlhcx6iw1#
我知道这不能回答你的问题,但我认为这可能还是有帮助的。uuid的优点之一是,可以在插入实体之前生成它们。这意味着您在保存之前有一个标识符,您可以引用它。为了使其工作,您需要使用库来生成uuid,然后在构造函数中执行此操作。据我所知,最常见的是ramsey/uuid,在symfony和ramsey/uuid理论的背景下。有了这个,你的实体可能看起来像这样:
如果您不喜欢这样,您仍然可以重用旧逻辑,只需切换到自定义生成器,指向库中的生成器: