繁体   English   中英

PostgreSQL:ramsey/uuid-doctrine 与 guid 类型的学说 UUID 策略

[英]PostgreSQL: ramsey/uuid-doctrine vs doctrine's UUID strategy with type guid

设置是 doctrine 2.8 和 PostgreSQL 数据库 13.2。 我试图了解使用 ramsey/uuid-doctrine 与使用 guid 作为类型的学说自己的 UUID 策略的区别。

ramsey/uuid-doctrine 示例:

/**
 * @ORM\Entity
 */
class Product
{
    /**
     * @var \Ramsey\Uuid\UuidInterface
     *
     * @ORM\Id
     * @ORM\Column(type="uuid", unique=true)
     * @ORM\GeneratedValue(strategy="CUSTOM")
     * @ORM\CustomIdGenerator(class=UuidGenerator::class)
     */
    protected $id;

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

学说自己的 UUID 策略及其自己的 guid 类型,映射到 PostgreSQL 上的 UUID:

/**
 * @ORM\Entity()
 */
class Product
{
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="UUID")
     * @ORM\Column(type="guid")
     */
    private $id;

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

问题:

  • 一种或另一种方法有什么区别、优点或缺点。 请记住,数据库是 PostgreSQL,它本机将 UUID 作为二进制处理。

谢谢!

我真的不知道这两种方法到底发生了什么,但是对于 Doctrine 3.0,UUID 策略似乎已被弃用,应该用CUSTOM策略替换,因此应该使用自定义 id 生成器(应该扩展 Doctrine 的 AbstractIdGenerator)。

您可以在本节中看到不推荐使用的标签。

至于这种特定方法的缺点,我不知道,但我想为了换取更多的控制(你必须实现你的生成器),它比 ramsey/uuid-doctrine 要重一些。

我认为这真的取决于您的需求,也许还取决于您使用第三方库的能力:如果像我一样,您在一家大公司从事大型项目,并且如果您正在与许多公司网络安全规则作斗争,那么这可能只是go 的唯一方法。

有关自定义策略实施的更多信息。

编辑:实际上是一回事,因为这两种方法是 CUSTOM 策略。 除了一个(拉姆齐)为您负责实施。 另一个允许您生成所需的任何值(不仅仅是 UUID)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM