gpt4 book ai didi

php - Doctrine Symfony ORM 不使用 PHP 7.2 生成 MySQL UUID

转载 作者:太空宇宙 更新时间:2023-11-03 11:27:33 27 4
gpt4 key购买 nike

我无法让 ORM 注释起作用,因此在刷新添加到表中的新实体后,UUID 会在 MySQL 中自动生成。这是我的代码:

实体:

    /**
* @ORM\Column(type="guid")
* @ORM\Id
* @ORM\GeneratedValue(strategy="UUID")
*/
protected $id;

在我的 Controller 中:

    /**
* @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 字段保留为空/空白。如果我在 MySQL 上设置 STRICT_TRANS_TABLES 模式,我在尝试将记录添加到数据库时会收到错误消息:

General error: 1364 Field 'id' doesn't have a default value

没有那个模式,记录被添加,但是UUID是null/blank

另请注意,如果我使用以下注释,自动生成的 ID 会正确创建并存储在表中的 ID 字段中

    /**
* @ORM\Id
* @ORM\Column(name="id", type="integer")
* @ORM\GeneratedValue(strategy="AUTO")
*/

我做错了什么?

最佳答案

我知道这不能回答您的问题,但我认为它可能仍有帮助。 UUID 的优点之一是,它们可以在插入实体之前生成。这意味着您在保存之前有一个标识符可以引用。为了让它工作,您将使用一个库来生成一个 UUID,然后在构造函数中执行它。据我所知,最常见的是 ramsey/uuid在 Symfony 和 Doctrine 的背景下 ramsey/uuid-doctrine .有了这个,您的实体可能看起来像这样:

/**
* @ORM\Entity()
*/
class Foo
{
/**
* @ORM\Id()
* @ORM\Column(type="uuid")
*/
private $id;

public function __construct()
{
$this->id = Uuid::uuid4();
}

public function getId(): string
{
return $this->id->toString();
}

//...
}

如果你不喜欢这样,你仍然可以重用你的旧逻辑,只需切换到一个自定义生成器,指向库中的那个:

 * @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class="Ramsey\Uuid\Doctrine\UuidGenerator")

关于php - Doctrine Symfony ORM 不使用 PHP 7.2 生成 MySQL UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53070168/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com