{"id":7644,"date":"2022-10-18T16:17:05","date_gmt":"2022-10-18T14:17:05","guid":{"rendered":"https:\/\/wata.es\/?p=7644"},"modified":"2026-02-02T09:32:14","modified_gmt":"2026-02-02T08:32:14","slug":"trabajando-con-enum-types-en-symfony-y-postgresql","status":"publish","type":"post","link":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/","title":{"rendered":"Trabajando con Enum Types en Symfony y PostgreSQL"},"content":{"rendered":"\n<p>A veces necesitamos una lista de valores v\u00e1lidos para un determinado campo de la base de datos. Para ello, podemos crear un tipo de datos personalizado en Symfony y utilizarlo en nuestras definiciones de mapeo de entidades. De este modo, tambi\u00e9n podemos utilizarlo en nuestras validaciones. Es especialmente \u00fatil cuando se utilizan tipos ENUM de PostgreSQL.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Este procedimiento est\u00e1 pensado para versiones de PHP anteriores a PHP 8.1 que incluyen el tipo nativo <a rel=\"noreferrer noopener\" href=\"https:\/\/www.php.net\/manual\/es\/language.enumerations.php\" target=\"_blank\">Enum<\/a>. Podr\u00edamos aplicar la misma soluci\u00f3n usando enums con unos pocos cambios o usando uno de los otros enfoques existentes. De todas formas, muchos proyectos siguen utilizando PHP 8.0 o anterior y este c\u00f3digo sigue siendo \u00fatil para personalizar nuestros tipos enum en PostgreSQL con Doctrine y Symfony.<\/p>\n\n\n\n<p>Imagina que has definido un tipo appointment_status como Enum en tu antiguo esquema de base de datos de la siguiente manera. <\/p>\n\n\n\n<pre id=\"block-9c147536-b016-40cc-9bc7-73da2af413b6\" class=\"wp-block-preformatted\">CREATE TYPE public.appointment_status AS ENUM\n ('Open', 'Invited', 'Assigned', 'Unassigned');<\/pre>\n\n\n\n<p>And you use this type in a certain column: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">CREATE TABLE IF NOT EXISTS public.appointment\n  {\n id integer NOT NULL,\n status public.appointment_status NOT NULL DEFAULT 'Open'::public.appointment_status,\n comment character varying(500)\n  }<\/pre>\n\n\n\n<p>En este art\u00edculo aprenderemos a manejar este tipo de datos de forma sencilla.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Creaci\u00f3n de un tipo Enum abstracto<\/strong><\/strong><\/h2>\n\n\n\n<p>El primer paso es crear una clase abstracta para este tipo de datos. Con esta abstracci\u00f3n, podemos reutilizar la clase para cualquier campo enum. <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><?php namespace App\\Infrastructure\\Persistence\\Doctrine\\DBAL; use Doctrine\\DBAL\\Platforms\\AbstractPlatform; use Doctrine\\DBAL\\Types\\Type; abstract class AbstractEnumType extends Type { protected string $schema = \"public\"; protected string $name; protected array $values = array(); public function getSQLDeclaration(array $column, AbstractPlatform $platform): string { return $this-??>schema . \".\\\"\" . $this-&gt;getName() . \"\\\"\"; \n  }  \n \n public function convertToPHPValue($value, AbstractPlatform $platform) \n  {  \n return $value; \n  }  \n \n public function convertToDatabaseValue($value, AbstractPlatform $platform) \n  {  \n if (!in_array($value, $this-&gt;getValidValues())) { \n throw new \\InvalidArgumentException(\"Invalid '\".$this-&gt;name.\"' value.\"); \n  }  \n return $value; \n  }  \n \n public function getName(): string \n  {  \n return $this-&gt;name; \n  }  \n \n public function requiresSQLCommentHint(AbstractPlatform $platform): bool \n  {  \n return true; \n  }  \n \n public function getValidValues(): array \n  {  \n return $this-&gt;values; \n  }  \n \n}  \n <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Creaci\u00f3n del tipo Enum<\/strong><\/h2>\n\n\n\n<p>Ahora debes seguir la creaci\u00f3n del Tipo Enum espec\u00edfico extendiendo la Clase Abstracta: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><?php namespace App\\Infrastructure\\Persistence\\Doctrine\\DBAL; class AppointmentStatusType extends AbstractEnumType { protected string $name = 'appointment_status'; protected array $values = []; protected static array $options = array( 'Open', 'Invited', 'Assigned', 'Unassigned' ); function __init() { $this-??>values = self::$options; \n  }  \n \n public function getValidValues(): array \n  {  \n return self::$options; \n  }  \n}  \n <\/pre>\n\n\n\n<p><strong>Consejo<\/strong>: Si la lista es demasiado larga, puede dividir la clase en dos archivos; la l\u00f3gica por un lado, y los valores por otro, y obtener clases m\u00e1s mantenibles <\/p>\n\n\n\n<pre id=\"block-9c147536-b016-40cc-9bc7-73da2af413b6\" class=\"wp-block-preformatted\"><?php namespace App\\Infrastructure\\Persistence\\Doctrine\\DBAL; USE APP\\Infrastructure\\Persistence\\Doctrine\\DBAL\\Enums\\CitizenshipEnum; class EmployeeCitizenshipType extends AbstractEnumType { protected string $name = 'employee_citizenship'; protected array $values = []; function __init() { $this-??>values = CitizenshipEnum::getValues();\n  }\n public function getValidValues(): array\n  {\n return CitizenshipEnum::getValues();\n  }\n}\nnamespace App\\Infrastructure\\Persistence\\Doctrine\\DBAL\\Enums;\nclass CitizenshipEnum\n{\n protected static array $values = [\n 'Ohne Angabe',\n 'Afghanistan',\n 'Algerien',\n 'Andorra',\n 'Angola',\n '[....]',\n 'Vietnam',\n 'Zentralafrikanische Republik',\n 'Zypern',\n ];\n public static function getValues(): array\n  {\n return self::$values;\n  }\n}<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Definir como tipo en Doctrina<\/strong><\/strong><\/h2>\n\n\n\n<p>En este punto tenemos que decirle a Symfony que tenemos un nuevo tipo de datos. As\u00ed, lo \u00fanico pendiente es mapearlo en doctrine y hay que decirle \u00ab\u00a1Eh, este tipo de datos es especial!\u00bb. Edite el doctrine.yml y a\u00f1ada estas l\u00edneas: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">doctrine: \n dbal: \n\n [\u2026] \n mapping_types: \n appointment_status: appointment_status \n\n \n\n types: \n appointment_status: App\\..\\AppointmentStatusType \n\n <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Mapeo de entidad con tipo de datos personalizado<\/strong> <\/strong><\/h2>\n\n\n\n<p>\u00a1S\u00ed! Doctrine conoce ahora los \u00fanicos valores admitidos para el estado. En nuestro archivo XML de mapeo de entidades, ahora podemos utilizar:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;!-- status -->\n&lt;field name=\"status\" type=\"appointment_status\" column=\"status\">\n    &lt;options>\n        &lt;option name=\"default\">Open&lt;\/option>\n    &lt;\/options>\n&lt;\/field> <\/pre>\n\n\n\n<p>En nuestro archivo de entidad, debemos utilizar \u00abstring\u00bb y no preocuparnos por el tipo de datos&#8230; Doctrine lo hace todo por nosotros: <\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">private string $status; <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Uso de assets para validar entradas<\/strong><\/h2>\n\n\n\n<p>Si ahora queremos validar un input con un tipo de dato especial, como vimos antes, podemos usar esta restricci\u00f3n usando Symfony\/Validator. Esto es \u00fatil para validar formularios o llamadas POST.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">status: \n  - NotBlank: ~ \n  - Choice: { callback: [ \\[..]ProductStatusType, getValidValues] }  <\/pre>\n\n\n\n<p>Y Symfony comprobar\u00e1 si el valor dado est\u00e1 definido en los valores admitidos en nuestro tipo de datos personalizado&#8230;. \u00a1Magia! La definici\u00f3n de callback hace una llamada al m\u00e9todo getValidValues() y comprueba si el valor dado es v\u00e1lido. <\/p>\n\n\n\n<p>\u00a1Symfony es genial! <\/p>\n","protected":false},"excerpt":{"rendered":"<p>A veces necesitamos una lista de valores v\u00e1lidos para un determinado campo de la base de datos. Para ello, podemos crear un tipo de datos personalizado en Symfony y utilizarlo en nuestras definiciones de mapeo de entidades. De este modo, tambi\u00e9n podemos utilizarlo en nuestras validaciones. Es especialmente \u00fatil cuando se utilizan tipos ENUM de [&hellip;]<\/p>\n","protected":false},"author":31,"featured_media":15547,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[89,183],"tags":[218,303,226,302],"class_list":["post-7644","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-noticias","category-tecnologia","tag-php-2","tag-php-es","tag-symfony-2","tag-symfony-es"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Trabajando con Enum Types en Symfony y PostgreSQL - WATA Factory<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Trabajando con Enum Types en Symfony y PostgreSQL - WATA Factory\" \/>\n<meta property=\"og:description\" content=\"A veces necesitamos una lista de valores v\u00e1lidos para un determinado campo de la base de datos. Para ello, podemos crear un tipo de datos personalizado en Symfony y utilizarlo en nuestras definiciones de mapeo de entidades. De este modo, tambi\u00e9n podemos utilizarlo en nuestras validaciones. Es especialmente \u00fatil cuando se utilizan tipos ENUM de [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/\" \/>\n<meta property=\"og:site_name\" content=\"WATA Factory\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/watafactory\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-10-18T14:17:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-02-02T08:32:14+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wata.es\/wp-content\/uploads\/2022\/10\/symfony-ES.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1500\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"\u00c1ngel Cardiel\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@watafactory\" \/>\n<meta name=\"twitter:site\" content=\"@watafactory\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u00c1ngel Cardiel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/\"},\"author\":{\"name\":\"\u00c1ngel Cardiel\",\"@id\":\"https:\\\/\\\/wata.es\\\/#\\\/schema\\\/person\\\/20fa86a3206ff8e84e5771780c8e48f0\"},\"headline\":\"Trabajando con Enum Types en Symfony y PostgreSQL\",\"datePublished\":\"2022-10-18T14:17:05+00:00\",\"dateModified\":\"2026-02-02T08:32:14+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/\"},\"wordCount\":443,\"publisher\":{\"@id\":\"https:\\\/\\\/wata.es\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wata.es\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/symfony-ES.webp\",\"keywords\":[\"php\",\"php\",\"symfony\",\"symfony\"],\"articleSection\":[\"Noticias\",\"Tecnolog\u00eda\"],\"inLanguage\":\"es\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/\",\"url\":\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/\",\"name\":\"Trabajando con Enum Types en Symfony y PostgreSQL - WATA Factory\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/wata.es\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/wata.es\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/symfony-ES.webp\",\"datePublished\":\"2022-10-18T14:17:05+00:00\",\"dateModified\":\"2026-02-02T08:32:14+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/#primaryimage\",\"url\":\"https:\\\/\\\/wata.es\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/symfony-ES.webp\",\"contentUrl\":\"https:\\\/\\\/wata.es\\\/wp-content\\\/uploads\\\/2022\\\/10\\\/symfony-ES.webp\",\"width\":1500,\"height\":800,\"caption\":\"Logo de Symfony con letras 'sf' estilizadas en blanco sobre un c\u00edrculo negro con texto 'Symfony'\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/wata.es\\\/es\\\/trabajando-con-enum-types-en-symfony-y-postgresql\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/wata.es\\\/es\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Trabajando con Enum Types en Symfony y PostgreSQL\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/wata.es\\\/#website\",\"url\":\"https:\\\/\\\/wata.es\\\/\",\"name\":\"WATA Factory\",\"description\":\"IT Consulting &amp; Outsourcing for your company\",\"publisher\":{\"@id\":\"https:\\\/\\\/wata.es\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/wata.es\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/wata.es\\\/#organization\",\"name\":\"WATA Factory\",\"url\":\"https:\\\/\\\/wata.es\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/wata.es\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/wata.es\\\/wp-content\\\/uploads\\\/2019\\\/12\\\/logowata.png\",\"contentUrl\":\"https:\\\/\\\/wata.es\\\/wp-content\\\/uploads\\\/2019\\\/12\\\/logowata.png\",\"width\":688,\"height\":176,\"caption\":\"WATA Factory\"},\"image\":{\"@id\":\"https:\\\/\\\/wata.es\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/watafactory\\\/\",\"https:\\\/\\\/x.com\\\/watafactory\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/wata\\\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/wata.es\\\/#\\\/schema\\\/person\\\/20fa86a3206ff8e84e5771780c8e48f0\",\"name\":\"\u00c1ngel Cardiel\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46b7e0a052526e7f1d6c664755ad7f551dfc3b7dd7ab050e92cddefcb45591bf?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46b7e0a052526e7f1d6c664755ad7f551dfc3b7dd7ab050e92cddefcb45591bf?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/46b7e0a052526e7f1d6c664755ad7f551dfc3b7dd7ab050e92cddefcb45591bf?s=96&d=mm&r=g\",\"caption\":\"\u00c1ngel Cardiel\"},\"sameAs\":[\"http:\\\/\\\/wata.es\"],\"url\":\"https:\\\/\\\/wata.es\\\/es\\\/author\\\/a-cardiel\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Trabajando con Enum Types en Symfony y PostgreSQL - WATA Factory","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/","og_locale":"es_ES","og_type":"article","og_title":"Trabajando con Enum Types en Symfony y PostgreSQL - WATA Factory","og_description":"A veces necesitamos una lista de valores v\u00e1lidos para un determinado campo de la base de datos. Para ello, podemos crear un tipo de datos personalizado en Symfony y utilizarlo en nuestras definiciones de mapeo de entidades. De este modo, tambi\u00e9n podemos utilizarlo en nuestras validaciones. Es especialmente \u00fatil cuando se utilizan tipos ENUM de [&hellip;]","og_url":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/","og_site_name":"WATA Factory","article_publisher":"https:\/\/www.facebook.com\/watafactory\/","article_published_time":"2022-10-18T14:17:05+00:00","article_modified_time":"2026-02-02T08:32:14+00:00","og_image":[{"width":1500,"height":800,"url":"https:\/\/wata.es\/wp-content\/uploads\/2022\/10\/symfony-ES.webp","type":"image\/webp"}],"author":"\u00c1ngel Cardiel","twitter_card":"summary_large_image","twitter_creator":"@watafactory","twitter_site":"@watafactory","twitter_misc":{"Escrito por":"\u00c1ngel Cardiel","Tiempo de lectura":"3 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/#article","isPartOf":{"@id":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/"},"author":{"name":"\u00c1ngel Cardiel","@id":"https:\/\/wata.es\/#\/schema\/person\/20fa86a3206ff8e84e5771780c8e48f0"},"headline":"Trabajando con Enum Types en Symfony y PostgreSQL","datePublished":"2022-10-18T14:17:05+00:00","dateModified":"2026-02-02T08:32:14+00:00","mainEntityOfPage":{"@id":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/"},"wordCount":443,"publisher":{"@id":"https:\/\/wata.es\/#organization"},"image":{"@id":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/wata.es\/wp-content\/uploads\/2022\/10\/symfony-ES.webp","keywords":["php","php","symfony","symfony"],"articleSection":["Noticias","Tecnolog\u00eda"],"inLanguage":"es"},{"@type":"WebPage","@id":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/","url":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/","name":"Trabajando con Enum Types en Symfony y PostgreSQL - WATA Factory","isPartOf":{"@id":"https:\/\/wata.es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/#primaryimage"},"image":{"@id":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/#primaryimage"},"thumbnailUrl":"https:\/\/wata.es\/wp-content\/uploads\/2022\/10\/symfony-ES.webp","datePublished":"2022-10-18T14:17:05+00:00","dateModified":"2026-02-02T08:32:14+00:00","breadcrumb":{"@id":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/#primaryimage","url":"https:\/\/wata.es\/wp-content\/uploads\/2022\/10\/symfony-ES.webp","contentUrl":"https:\/\/wata.es\/wp-content\/uploads\/2022\/10\/symfony-ES.webp","width":1500,"height":800,"caption":"Logo de Symfony con letras 'sf' estilizadas en blanco sobre un c\u00edrculo negro con texto 'Symfony'"},{"@type":"BreadcrumbList","@id":"https:\/\/wata.es\/es\/trabajando-con-enum-types-en-symfony-y-postgresql\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wata.es\/es\/"},{"@type":"ListItem","position":2,"name":"Trabajando con Enum Types en Symfony y PostgreSQL"}]},{"@type":"WebSite","@id":"https:\/\/wata.es\/#website","url":"https:\/\/wata.es\/","name":"WATA Factory","description":"IT Consulting &amp; Outsourcing for your company","publisher":{"@id":"https:\/\/wata.es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/wata.es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/wata.es\/#organization","name":"WATA Factory","url":"https:\/\/wata.es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/wata.es\/#\/schema\/logo\/image\/","url":"https:\/\/wata.es\/wp-content\/uploads\/2019\/12\/logowata.png","contentUrl":"https:\/\/wata.es\/wp-content\/uploads\/2019\/12\/logowata.png","width":688,"height":176,"caption":"WATA Factory"},"image":{"@id":"https:\/\/wata.es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/watafactory\/","https:\/\/x.com\/watafactory","https:\/\/www.linkedin.com\/company\/wata\/"]},{"@type":"Person","@id":"https:\/\/wata.es\/#\/schema\/person\/20fa86a3206ff8e84e5771780c8e48f0","name":"\u00c1ngel Cardiel","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/46b7e0a052526e7f1d6c664755ad7f551dfc3b7dd7ab050e92cddefcb45591bf?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/46b7e0a052526e7f1d6c664755ad7f551dfc3b7dd7ab050e92cddefcb45591bf?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/46b7e0a052526e7f1d6c664755ad7f551dfc3b7dd7ab050e92cddefcb45591bf?s=96&d=mm&r=g","caption":"\u00c1ngel Cardiel"},"sameAs":["http:\/\/wata.es"],"url":"https:\/\/wata.es\/es\/author\/a-cardiel\/"}]}},"_links":{"self":[{"href":"https:\/\/wata.es\/es\/wp-json\/wp\/v2\/posts\/7644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wata.es\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wata.es\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wata.es\/es\/wp-json\/wp\/v2\/users\/31"}],"replies":[{"embeddable":true,"href":"https:\/\/wata.es\/es\/wp-json\/wp\/v2\/comments?post=7644"}],"version-history":[{"count":5,"href":"https:\/\/wata.es\/es\/wp-json\/wp\/v2\/posts\/7644\/revisions"}],"predecessor-version":[{"id":15550,"href":"https:\/\/wata.es\/es\/wp-json\/wp\/v2\/posts\/7644\/revisions\/15550"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wata.es\/es\/wp-json\/wp\/v2\/media\/15547"}],"wp:attachment":[{"href":"https:\/\/wata.es\/es\/wp-json\/wp\/v2\/media?parent=7644"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wata.es\/es\/wp-json\/wp\/v2\/categories?post=7644"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wata.es\/es\/wp-json\/wp\/v2\/tags?post=7644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}