uuid-doctrine, 允许使用 Ramsey/UUID UUID作为 Doctrine 字段类型

分享于 

7分钟阅读

GitHub

  繁體 雙語
Allow the use of a ramsey/uuid UUID as Doctrine field type.
  • 源代码名称:uuid-doctrine
  • 源代码网址:http://www.github.com/ramsey/uuid-doctrine
  • uuid-doctrine源代码文档
  • uuid-doctrine源代码下载
  • Git URL:
    git://www.github.com/ramsey/uuid-doctrine.git
    Git Clone代码到本地:
    git clone http://www.github.com/ramsey/uuid-doctrine
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/ramsey/uuid-doctrine
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Ramsey/uuid原理

    Source CodeLatest VersionSoftware LicenseBuild StatusCoverage StatusTotal Downloads

    Ramsey/uuid包提供了使用 /uuid 作为 Doctrine 字段类型的能力。

    这个项目遵循一个贡献者的行为准则。 通过参与这个项目及其社区,你将需要遵守这里代码。

    安装

    安装的首选方法是通过 PackagistComposer。 运行以下命令安装软件包并将它的作为对你的项目 composer.json的要求添加:

    composer require ramsey/uuid-doctrine

    示例

    配置

    要配置 Doctrine 以使用 Ramsey/uuid作为字段类型,你需要在 Bootstrap 中设置以下内容:

    DoctrineDBALTypesType::addType('uuid', 'RamseyUuidDoctrineUuidType');

    在Symfony中:

    # app/config/config.ymldoctrine:
     dbal:
     types:
     uuid: RamseyUuidDoctrineUuidType

    在 Zend 框架中:

    <?php// module.config.phpuseRamseyUuidDoctrineUuidType;return ['doctrine'=> ['configuration'=> ['orm_default'=> ['types'=> [UuidType::NAME=>UuidType::class,

    用法

    然后,在模型中,可以通过将 @Column 类型设置为 uuid,并定义 RamseyUuidUuidGenerator的自定义生成器来注释属性。 Doctrine 会处理剩下的。

    useDoctrineORMMappingasORM;/** * @ORMEntity * @ORMTable(name="products")*/classProduct{/** * @var RamseyUuidUuid * * @ORMId * @ORMColumn(type="uuid", unique=true) * @ORMGeneratedValue(strategy="CUSTOM") * @ORMCustomIdGenerator(class="RamseyUuidDoctrineUuidGenerator")*/protected$id;publicfunctiongetId() {return$this->id; }}

    如果你使用的是XML映射而不是PHP注释。

    <idname="id"column="id"type="uuid">
     <generatorstrategy="CUSTOM"/>
     <custom-id-generatorclass="RamseyUuidDoctrineUuidGenerator"/>
    </id>

    你还可以使用YAML映射。

    id:
     id:
     type: uuidgenerator:
     strategy: CUSTOMcustomIdGenerator:
     class: RamseyUuidDoctrineUuidGenerator

    二进制数据库列

    在前面的示例中,Doctrine 将创建 CHAR(36) 类型的数据库列,但是你也可以使用这个库将uuid存储为二进制字符串。 UuidBinaryType 帮助完成这里任务。

    在你的Bootstrap 中,放置以下内容:

    DoctrineDBALTypesType::addType('uuid_binary', 'RamseyUuidDoctrineUuidBinaryType');$entityManager->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('uuid_binary', 'binary');

    在Symfony中:

    # app/config/config.ymldoctrine:
     dbal:
     types:
     uuid_binary: RamseyUuidDoctrineUuidBinaryTypemapping_types:
     uuid_binary: binary

    然后,在注释模型类属性时,使用 uuid_binary 而不是 uuid:

    
    @Column(type="uuid_binary")
    
    
    
    

    innodb优化二进制 uuid

    如果你想使用uuid作为主键,则更适合。 请注意,这可能会导致意外

    • 解码未使用这里方法生成的字节
    • 另一个代码( 不了解这里方法) 尝试解码结果字节

    本文中的更多信息和 UUID谈话由Ben的( 从幻灯片 61开始)。

    DoctrineDBALTypesType::addType('uuid_binary_ordered_time', 'RamseyUuidDoctrineUuidBinaryOrderedTimeType');$entityManager->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('uuid_binary_ordered_time', 'binary');

    在Symfony中:

    # app/config/config.ymldoctrine:
     dbal:
     types:
     uuid_binary_ordered_time: RamseyUuidDoctrineUuidBinaryOrderedTimeTypemapping_types:
     uuid_binary_ordered_time: binary

    然后,在模型中,可以通过将 @Column 类型设置为 uuid_binary_ordered_time,并定义 RamseyUuidUuidOrderedTimeGenerator的自定义生成器来注释属性。 Doctrine 会处理剩下的。

    /** * @Entity * @Table(name="products")*/classProduct{/** * @var RamseyUuidUuid * * @Id * @Column(type="uuid_binary_ordered_time", unique=true) * @GeneratedValue(strategy="CUSTOM") * @CustomIdGenerator(class="RamseyUuidDoctrineUuidOrderedTimeGenerator")*/protected$id;publicfunctiongetId() {return$this->id; }}

    如果你使用的是XML映射而不是PHP注释。

    <idname="id"column="id"type="uuid_binary_ordered_time">
     <generatorstrategy="CUSTOM"/>
     <custom-id-generatorclass="RamseyUuidDoctrineUuidOrderedTimeGenerator"/>
    </id>

    更多信息

    有关使用 Doctrine 入门的更多信息,请参阅"。开始使用 Doctrine"教程。

    欢迎捐赠请阅读投稿详情。

    版权和许可证

    Ramsey是版权 © ,并授权使用在MIT许可证( MIT ) 下使用。 有关更多信息,请参见许可证


    DOC  type  字段  RAM  Doctrine  UUID  
    相关文章