Verwenden Sie ramsey/uuid als Doctrine-Feldtyp
Das Paket ramsey/uuid-doctrine bietet die Möglichkeit, ramsey/uuid als Doctrine-Feldtyp zu verwenden.
Dieses Projekt unterliegt einem Verhaltenskodex. Durch die Teilnahme an diesem Projekt und seiner Community wird von Ihnen erwartet, dass Sie diesen Kodex einhalten.
Installieren Sie dieses Paket als Abhängigkeit mit Composer.
composer require ramsey/uuid-doctrine
Um Doctrine für die Verwendung von ramsey/uuid als Feldtyp zu konfigurieren, müssen Sie Folgendes in Ihrem Bootstrap einrichten:
Doctrine DBAL Types Type:: addType ( ' uuid ' , ' RamseyUuidDoctrineUuidType ' );
In Symfony:
# config/packages/doctrine.yaml
doctrine :
dbal :
types :
uuid : RamseyUuidDoctrineUuidType
Im Zend Framework:
<?php
// module . config . php
use Ramsey Uuid Doctrine UuidType ;
return [
' doctrine ' => [
' configuration ' => [
' orm_default ' => [
' types ' => [
UuidType:: NAME => UuidType::class,
In Laravel:
<?php
// config / doctrine . php
' custom_types ' => [
Ramsey Uuid Doctrine UuidType:: NAME => Ramsey Uuid Doctrine UuidType::class
],
In roave/psr-container-doctrine:
<?php
use Ramsey Uuid Doctrine UuidType ;
return [
' doctrine ' => [
' types ' => [
UuidType:: NAME => UuidType::class,
],
/* ... */
],
/* ... */
];
Anschließend können Sie in Ihren Modellen Eigenschaften mit Anmerkungen versehen, indem Sie den Typ #[Column]
auf uuid
festlegen und einen benutzerdefinierten Generator von RamseyUuidUuidGenerator
definieren. Den Rest erledigt die Lehre.
use Doctrine ORM Mapping as ORM ;
use Ramsey Uuid Doctrine UuidGenerator ;
use Ramsey Uuid UuidInterface ;
#[ ORM Entity]
#[ ORM Table(name: " products " )]
class Product
{
#[ ORM Id]
#[ ORM Column(type: " uuid " , unique: true )]
#[ ORM GeneratedValue(strategy: " CUSTOM " )]
#[ ORM CustomIdGenerator(class: UuidGenerator::class)]
protected UuidInterface $ id ;
public function getId (): UuidInterface
{
return $ this -> id ;
}
}
Wenn Sie das XML-Mapping anstelle von PHP-Attributen verwenden.
< id name = " id " column = " id " type = " uuid " >
< generator strategy = " CUSTOM " />
< custom-id-generator class = " RamseyUuidDoctrineUuidGenerator " />
</ id >
Sie können auch das YAML-Mapping verwenden.
id :
id :
type : uuid
generator :
strategy : CUSTOM
customIdGenerator :
class : RamseyUuidDoctrineUuidGenerator
Im vorherigen Beispiel erstellt Doctrine eine Datenbankspalte vom Typ CHAR(36)
, wenn MariaDB/MySQL verwendet wird. Sie können diese Bibliothek jedoch auch verwenden, um UUIDs als Binärzeichenfolgen zu speichern. Der UuidBinaryType
hilft dabei.
Platzieren Sie in Ihrem Bootstrap Folgendes:
Doctrine DBAL Types Type:: addType ( ' uuid_binary ' , ' RamseyUuidDoctrineUuidBinaryType ' );
$ entityManager -> getConnection ()-> getDatabasePlatform ()-> registerDoctrineTypeMapping ( ' uuid_binary ' , ' binary ' );
In Symfony:
# config/packages/doctrine.yaml
doctrine :
dbal :
types :
uuid_binary : RamseyUuidDoctrineUuidBinaryType
# Uncomment if using doctrine/orm <2.8
# mapping_types:
# uuid_binary: binary
Verwenden Sie dann beim Kommentieren von Modellklasseneigenschaften uuid_binary
anstelle von uuid
:
#[Column(type: "uuid_binary")]
Besser geeignet, wenn Sie UUIDs als Primärschlüssel verwenden möchten. Beachten Sie, dass dies unbeabsichtigte Auswirkungen haben kann, wenn:
Weitere Informationen finden Sie in diesem Percona-Artikel und im UUID-Talk von Ben Ramsey (beginnt bei Folie 58).
Doctrine DBAL Types Type:: addType ( ' uuid_binary_ordered_time ' , ' RamseyUuidDoctrineUuidBinaryOrderedTimeType ' );
$ entityManager -> getConnection ()-> getDatabasePlatform ()-> registerDoctrineTypeMapping ( ' uuid_binary_ordered_time ' , ' binary ' );
In Symfony:
# config/packages/doctrine.yaml
doctrine :
dbal :
types :
uuid_binary_ordered_time : RamseyUuidDoctrineUuidBinaryOrderedTimeType
# Uncomment if using doctrine/orm <2.8
# mapping_types:
# uuid_binary_ordered_time: binary
Anschließend können Sie in Ihren Modellen Eigenschaften mit Anmerkungen versehen, indem Sie den Typ @Column
auf uuid_binary_ordered_time
festlegen und einen benutzerdefinierten Generator von RamseyUuidUuidOrderedTimeGenerator
definieren. Den Rest erledigt die Lehre.
#[Entity]
#[Table(name: " products " )]´
class Product
{
#[Id]
#[Column(type: " uuid_binary_ordered_time " , unique: true )]
#[GeneratedValue(strategy: " CUSTOM " )]
#[CustomIdGenerator(class: UuidOrderedTimeGenerator::class)]
protected UuidInterface $ id ;
public function getId (): UuidInterface
{
return $ this -> id ;
}
}
Wenn Sie das XML-Mapping anstelle von PHP-Annotationen verwenden.
< id name = " id " column = " id " type = " uuid_binary_ordered_time " >
< generator strategy = " CUSTOM " />
< custom-id-generator class = " RamseyUuidDoctrineUuidOrderedTimeGenerator " />
</ id >
Mit der Einführung neuer UUID-Typen (einschließlich sortierbarer, auf der Unix-Epoche basierender UUID Version 7) wird nun empfohlen, reguläres uuid_binary
mit RamseyUuidDoctrineUuidV7Generator
für Primärschlüssel zu verwenden.
Platzieren Sie in Ihrem Bootstrap Folgendes:
Doctrine DBAL Types Type:: addType ( ' uuid_binary ' , ' RamseyUuidDoctrineUuidBinaryType ' );
$ entityManager -> getConnection ()-> getDatabasePlatform ()-> registerDoctrineTypeMapping ( ' uuid_binary ' , ' binary ' );
In Symfony:
# config/packages/doctrine.yaml
doctrine :
dbal :
types :
uuid_binary : RamseyUuidDoctrineUuidBinaryType
# Uncomment if using doctrine/orm <2.8
# mapping_types:
# uuid_binary: binary
Anschließend können Sie in Ihren Modellen Eigenschaften mit Anmerkungen versehen, indem Sie den Typ #[Column]
auf uuid_binary
festlegen und einen benutzerdefinierten Generator von RamseyUuidUuidV7Generator
definieren. Den Rest erledigt die Lehre.
#[Entity]
#[Table(name: " products " )]
class Product
{
#[Id]
#[Column(type: " uuid_binary " , unique: true )]
#[GeneratedValue(strategy: " CUSTOM " )]
#[CustomIdGenerator(class: UuidV7Generator::class)]
protected UuidInterface $ id ;
public function getId (): UuidInterface
{
return $ this -> id ;
}
}
Wenn Sie das XML-Mapping anstelle von PHP-Annotationen verwenden.
< id name = " id " column = " id " type = " uuid_binary " >
< generator strategy = " CUSTOM " />
< custom-id-generator class = " RamseyUuidDoctrineUuidV7Generator " />
</ id >
Wenn Sie PostgreSQL verwenden, verwendet Doctrine die uuid
von PostgreSQL für RamseyUuidDoctrineUuidType
( uuid
). Daher müssen Sie bei der Verwendung von PostgreSQL nicht die Typen uuid_binary
/ uuid_binary_ordered_time
verwenden. Sie können jedoch weiterhin UuidV7Generator::class
verwenden, um die Indizierung zu optimieren.
#[Entity]
#[Table(name: " products " )]
class Product
{
#[Id]
#[Column(type: " uuid " , unique: true )]
#[GeneratedValue(strategy: " CUSTOM " )]
#[CustomIdGenerator(class: UuidV7Generator::class)]
protected UuidInterface $ id ;
public function getId (): UuidInterface
{
return $ this -> id ;
}
}
Wenn Sie mit binären Bezeichnern arbeiten, möchten Sie diese möglicherweise in ein lesbares Format konvertieren. Ab MySql 8.0 können Sie die hier dokumentierten Funktionen BIN_TO_UUID und UUID_TO_BIN verwenden. Das zweite Argument bestimmt, ob die Bytereihenfolge vertauscht werden soll. Daher sollten Sie bei Verwendung von uuid_binary
0 und bei Verwendung von uuid_binary_ordered_time
1 übergeben.
Für andere Versionen können Sie Folgendes verwenden:
DELIMITER $$
CREATE
FUNCTION BIN_TO_UUID(bin_uuid BINARY( 16 ), swap_flag BOOLEAN )
RETURNS CHAR ( 36 )
DETERMINISTIC
BEGIN
DECLARE hex_uuid CHAR ( 32 );
SET hex_uuid = HEX(bin_uuid);
RETURN LOWER (CONCAT(
IF(swap_flag, SUBSTR(hex_uuid, 9 , 8 ),SUBSTR(hex_uuid, 1 , 8 )), ' - ' ,
IF(swap_flag, SUBSTR(hex_uuid, 5 , 4 ),SUBSTR(hex_uuid, 9 , 4 )), ' - ' ,
IF(swap_flag, SUBSTR(hex_uuid, 1 , 4 ),SUBSTR(hex_uuid, 13 , 4 )), ' - ' ,
SUBSTR(hex_uuid, 17 , 4 ), ' - ' ,
SUBSTR(hex_uuid, 21 )
));
END$$
CREATE
FUNCTION UUID_TO_BIN(str_uuid CHAR ( 36 ), swap_flag BOOLEAN )
RETURNS BINARY( 16 )
DETERMINISTIC
BEGIN
RETURN UNHEX(CONCAT(
IF(swap_flag, SUBSTR(str_uuid, 15 , 4 ),SUBSTR(str_uuid, 1 , 8 )),
SUBSTR(str_uuid, 10 , 4 ),
IF(swap_flag, SUBSTR(str_uuid, 1 , 8 ),SUBSTR(str_uuid, 15 , 4 )),
SUBSTR(str_uuid, 20 , 4 ),
SUBSTR(str_uuid, 25 ))
);
END$$
DELIMITER ;
Tests:
mysql> select '07a2f327-103a-11e9-8025-00ff5d11a779' as uuid, BIN_TO_UUID(UUID_TO_BIN('07a2f327-103a-11e9-8025-00ff5d11a779', 0), 0) as flip_flop;
+--------------------------------------+--------------------------------------+
| uuid | flip_flop |
+--------------------------------------+--------------------------------------+
| 07a2f327-103a-11e9-8025-00ff5d11a779 | 07a2f327-103a-11e9-8025-00ff5d11a779 |
+--------------------------------------+--------------------------------------+
1 row in set (0.00 sec)
mysql> select '07a2f327-103a-11e9-8025-00ff5d11a779' as uuid, BIN_TO_UUID(UUID_TO_BIN('07a2f327-103a-11e9-8025-00ff5d11a779', 1), 1) as flip_flop;
+--------------------------------------+--------------------------------------+
| uuid | flip_flop |
+--------------------------------------+--------------------------------------+
| 07a2f327-103a-11e9-8025-00ff5d11a779 | 07a2f327-103a-11e9-8025-00ff5d11a779 |
+--------------------------------------+--------------------------------------+
1 row in set (0.00 sec)
Weitere Informationen zum Einstieg in Doctrine finden Sie im Tutorial „Erste Schritte mit Doctrine“.
Beiträge sind willkommen! Um einen Beitrag zu leisten, machen Sie sich bitte mit CONTRIBUTING.md vertraut.
Die Sicherheit der Benutzerinformationen hat oberste Priorität und wir begrüßen den Beitrag externer Sicherheitsforscher. Wenn Sie glauben, ein Sicherheitsproblem in der in diesem Repository verwalteten Software gefunden zu haben, lesen Sie bitte SECURITY.md, um Anweisungen zum Einreichen eines Schwachstellenberichts zu erhalten.
Verfügbar als Teil des Tidelift-Abonnements.
Die Betreuer von ramsey/uuid-doctrine und Tausenden anderer Pakete arbeiten mit Tidelift zusammen, um kommerziellen Support und Wartung für die Open-Source-Pakete bereitzustellen, die Sie zum Erstellen Ihrer Anwendungen verwenden. Sparen Sie Zeit, reduzieren Sie Risiken und verbessern Sie den Zustand des Codes, während Sie gleichzeitig die Betreuer genau der Pakete bezahlen, die Sie verwenden. Erfahren Sie mehr.
Die ramsey/uuid-doctrine-Bibliothek unterliegt dem Urheberrecht © Ben Ramsey und ist zur Nutzung unter der MIT-Lizenz (MIT) lizenziert. Weitere Informationen finden Sie unter LIZENZ.