gpt4 book ai didi

postgresql - 每次迁移时改变 uuid 列的学说

转载 作者:行者123 更新时间:2023-12-04 17:09:40 27 4
gpt4 key购买 nike

我想知道是否有人遇到过此类问题。我一直在寻找解决方案,但没有找到。

每次我使用 doctrine 生成迁移时,我都会在迁移文件中看到:

public function up(Schema $schema): void
{
$this->addSql('ALTER TABLE verification ALTER id TYPE UUID');
$this->addSql('ALTER TABLE verification ALTER id DROP DEFAULT');
}


public function down(Schema $schema): void
{
$this->addSql('ALTER TABLE verification ALTER verification_id TYPE UUID');
$this->addSql('ALTER TABLE verification ALTER verification_id DROP DEFAULT');
}

这些是我的注释:

use Ramsey\Uuid\Doctrine\UuidGenerator;

/**
* @ORM\Id
* @ORM\Column(type="uuid", unique=true)
* @ORM\GeneratedValue(strategy="CUSTOM")
* @ORM\CustomIdGenerator(class=UuidGenerator::class)
*
* @Groups({"read"})
**/
private UuidInterface $id;

我使用 postgress 图片:postgres:13-alpine和“学说/学说-迁移包”:“^3.0”,

框架"api-平台/核心": "^2.6",

我已经尝试过以前版本的 doctrine-migrations-bundle 和 postgres:12

每次迁移都会添加这些更改。我检查了我的本地数据库,删除它,删除 docker 卷。然后我再次启动容器,运行迁移以确保我得到正确的数据库模式。问题仍然存在。我不知道是什么原因导致这个问题。也许你们中的一些人知道我可以寻找什么?

最佳答案

你的 composer.lock 中可能有 1.7.0 版本的 ramsey/uuid-doctrine 扩展,因为它在生成模式方面确实存在错误。这是几天前修复的:https://github.com/ramsey/uuid-doctrine/pull/165

所以尝试降级到 1.6.0:

composer require ramsey/uuid-doctrine:1.6.0

(或升级到最新的开发版本)

解释

之所以 doctrine 不断生成用于更改 uuid 列的迁移,是因为自定义类型类(即 Ramsey\Uuid\Doctrine\UuidType)缺少 requiresSQLCommentHint 标志(在 1.7.0 中) :

    /**
* {@inheritdoc}
*
* @param AbstractPlatform $platform
*
* @return bool
*/
public function requiresSQLCommentHint(AbstractPlatform $platform)
{
return true;
}

此标志告诉 doctrine 使用该字段的注释来确定该字段中的值需要混合到哪个自定义类型中。如果是 Ramsey UuidType,注释应如下所示:(DC2Type:uuid)

作为一种快速解决方法,您甚至可以手动添加评论(无需升级 ramsey/uuid-doctrine 包):

   COMMENT ON COLUMN verification.id IS '(DC2Type:uuid)'

或通过迁移:

   $this->addSql('COMMENT ON COLUMN verification.id IS \'(DC2Type:uuid)\'');

关于postgresql - 每次迁移时改变 uuid 列的学说,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69741672/

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