diff --git a/index.md b/index.md index b6836f7a033841c40dd2cb0328f3b4f9463d5644..65ca8e6161f8f0b4e8ceb57a1943b566d14f3d97 100644 --- a/index.md +++ b/index.md @@ -137,6 +137,52 @@ Note: - Doctrine Embeddables - Custom types +--- +### Les embeddables + +```php +use Doctrine\ORM\Annotation as ORM; + +class NiceArticle +{ + private $uuid; + + /** @ORM\Embedded(class = "ArticleContent") */ + private $articleContent; +} +``` + +Note: +- À utiliser en cas de Value Object composite +- Des soucis avec la nullabilité, contournables avec un package +- Ne peuvent contenir des colonnes complexes + +--- +### Les custom types + +```php +use Doctrine\DBAL\Platforms\AbstractPlatform as P; + +final class ArticleContentType extends Type +{ + public function convertToPHPValue($value, P $p): ArticleId + { + return new ArticleId($value); + } + + public function convertToDatabaseValue($value, P $p): string + { + return (string) $value; + } +} +``` + +Note: +- Permet de contrôler qu'on respecte toujours les règles métier à + l'hydratation. Si ça crashe, c'est qu'il manque des migrations. +- La méthode `getName()` fait doublon avec le nom utilisé lors de + l'enregistrement du type dans le registre de type, et disparaître dès Doctrine 3 + --- ### Les constructeurs nommés