{"id":7443,"date":"2022-10-18T09:00:00","date_gmt":"2022-10-18T07:00:00","guid":{"rendered":"https:\/\/wata.es\/?p=7443"},"modified":"2025-04-14T16:49:32","modified_gmt":"2025-04-14T14:49:32","slug":"migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2","status":"publish","type":"post","link":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/","title":{"rendered":"Working with Enum Types in Symfony and PostgreSQL\u00a0"},"content":{"rendered":"\n<p>Sometimes we need a list of valid values for a certain field in the database. To this end, we can create a custom data type in Symfony and use it in our entity mapping definitions. That way, we can also use it in our validations. It\u2019s especially helpful when using PostgreSQL ENUM types.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>This procedure is intended for PHP versions earlier than PHP 8.1 which include the native&nbsp;<a rel=\"noreferrer noopener\" href=\"https:\/\/www.php.net\/manual\/es\/language.enumerations.php\" target=\"_blank\">Enum<\/a>&nbsp;type. We could handle the same solution using enums with few changes or using one of another existing approach. Anyway, many projects still use PHP 8.0 or earlier and this code is still useful for customising our enum types in PostgreSQL with Doctrine and Symfony.<\/p>\n\n\n\n<p>Imagine you have defined a type appointment_status as Enum in your old database schema like this.&nbsp;&nbsp;<\/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:&nbsp;<\/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>So, in this article we learn how to handle this kind of data in an easy way.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong><strong>Creating an Abstract Enum Type<\/strong><\/strong><\/h2>\n\n\n\n<p>The first step is creating an Abstract Class for this kind of type of data. With this abstraction, we can reuse the class for any enum field.&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php \n \nnamespace App\\Infrastructure\\Persistence\\Doctrine\\DBAL; \n \nuse Doctrine\\DBAL\\Platforms\\AbstractPlatform; \nuse Doctrine\\DBAL\\Types\\Type; \n \nabstract class AbstractEnumType extends Type \n{ \n \n    protected string $schema = \"public\"; \n    protected string $name; \n    protected array $values = array(); \n \n \n    public function getSQLDeclaration(array $column, AbstractPlatform $platform): string \n    { \n        return $this-&gt;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\n <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Creating the Enum Type<\/strong><\/h2>\n\n\n\n<p>Now you must follow creating the specific Enum Type extending the Abstract Class:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;?php \n \nnamespace App\\Infrastructure\\Persistence\\Doctrine\\DBAL; \n \nclass AppointmentStatusType extends AbstractEnumType \n{ \n    protected string $name = 'appointment_status'; \n    protected array $values = []; \n    protected static array $options = array( \n        'Open', \n        'Invited', \n        'Assigned', \n        'Unassigned' \n    ); \n \n    function __init() \n    { \n        $this-&gt;values = self::$options; \n    } \n \n    public function getValidValues(): array \n    { \n        return self::$options; \n    } \n} \n\n <\/pre>\n\n\n\n<p><strong>Tip:<\/strong>&nbsp;If the list is too long, you can split the class into two files; the logic on one side, and the values on the other, and get more maintainable classes&nbsp;&nbsp;<\/p>\n\n\n\n<pre id=\"block-9c147536-b016-40cc-9bc7-73da2af413b6\" class=\"wp-block-preformatted\">&lt;?php\n\nnamespace App\\Infrastructure\\Persistence\\Doctrine\\DBAL;\n\nUSE APP\\Infrastructure\\Persistence\\Doctrine\\DBAL\\Enums\\CitizenshipEnum;\n\nclass EmployeeCitizenshipType extends AbstractEnumType\n{\n    protected string $name = 'employee_citizenship';\n    protected array $values = [];\n\n    function __init()\n    {\n        $this-&gt;values = CitizenshipEnum::getValues();\n    }\n\n    public function getValidValues(): array\n    {\n        return CitizenshipEnum::getValues();\n    }\n}\n\nnamespace App\\Infrastructure\\Persistence\\Doctrine\\DBAL\\Enums;\n\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\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>Define as type in Doctrine<\/strong><\/strong><\/h2>\n\n\n\n<p>At this point we need to tell Symfony that we have a new datatype. So, the only pending thing is a map in doctrine and we have to tell it \u201cEh, this data type is special!\u201d. Edit the doctrine.yml and add these lines:&nbsp;<\/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>Mapping entity with custom datatype<\/strong>&nbsp;<\/strong><\/h2>\n\n\n\n<p>Yes! Doctrine now knows the only admitted values for the status. In our XML file for mapping entities, we can now use:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">&lt;!-- status --&gt;\n&lt;field name=\"status\" type=\"appointment_status\" column=\"status\"&gt;\n    &lt;options&gt;\n        &lt;option name=\"default\"&gt;Open&lt;\/option&gt;\n    &lt;\/options&gt;\n&lt;\/field&gt; <\/pre>\n\n\n\n<p>In our entity file, we must use \u201cstring\u201d and don\u2019t worry about the datatype\u2026 Doctrine does everything for us:&nbsp;<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">private string $status; <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Using asserts to validate inputs<\/strong><\/h2>\n\n\n\n<p>If we want to validate an input with special datatype now, as we saw before, we can use this constraint using Symfony\/Validator. This is useful for validating forms or POST calls.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">status: \n  - NotBlank: ~ \n  - Choice: { callback: [ \\[..]ProductStatusType, getValidValues] } <\/pre>\n\n\n\n<p>And Symfony will check if the given value is defined in the admits values in our custom data type\u2026. Magic! The callback definition makes a call to method getValidValues() and it checks if the given value is a valid one.&nbsp;&nbsp;&nbsp;<\/p>\n\n\n\n<p>Symfony is amazing!&nbsp;&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Sometimes we need a list of valid values for a certain field in the database. To this end, we can create a custom data type in Symfony and use it in our entity mapping definitions. That way, we can also use it in our validations. It\u2019s especially helpful when using PostgreSQL ENUM types.<\/p>\n","protected":false},"author":31,"featured_media":6549,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[2,180],"tags":[240,239],"class_list":["post-7443","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news","category-technology","tag-php-3","tag-symfony-3"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.1.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Working with Enum Types in Symfony and PostgreSQL\u00a0 - 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\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Working with Enum Types in Symfony and PostgreSQL\u00a0 - WATA Factory\" \/>\n<meta property=\"og:description\" content=\"Sometimes we need a list of valid values for a certain field in the database. To this end, we can create a custom data type in Symfony and use it in our entity mapping definitions. That way, we can also use it in our validations. It\u2019s especially helpful when using PostgreSQL ENUM types.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/\" \/>\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-18T07:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-04-14T14:49:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/wata.es\/wp-content\/uploads\/2020\/08\/symfony.png\" \/>\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\/png\" \/>\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=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u00c1ngel Cardiel\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/\"},\"author\":{\"name\":\"\u00c1ngel Cardiel\",\"@id\":\"https:\/\/wata.es\/#\/schema\/person\/20fa86a3206ff8e84e5771780c8e48f0\"},\"headline\":\"Working with Enum Types in Symfony and PostgreSQL\u00a0\",\"datePublished\":\"2022-10-18T07:00:00+00:00\",\"dateModified\":\"2025-04-14T14:49:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/\"},\"wordCount\":438,\"publisher\":{\"@id\":\"https:\/\/wata.es\/#organization\"},\"image\":{\"@id\":\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wata.es\/wp-content\/uploads\/2020\/08\/symfony.png\",\"keywords\":[\"php\",\"symfony\"],\"articleSection\":[\"News\",\"Technology\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/\",\"url\":\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/\",\"name\":\"Working with Enum Types in Symfony and PostgreSQL\u00a0 - WATA Factory\",\"isPartOf\":{\"@id\":\"https:\/\/wata.es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/wata.es\/wp-content\/uploads\/2020\/08\/symfony.png\",\"datePublished\":\"2022-10-18T07:00:00+00:00\",\"dateModified\":\"2025-04-14T14:49:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#primaryimage\",\"url\":\"https:\/\/wata.es\/wp-content\/uploads\/2020\/08\/symfony.png\",\"contentUrl\":\"https:\/\/wata.es\/wp-content\/uploads\/2020\/08\/symfony.png\",\"width\":1500,\"height\":800},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/wata.es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Working with Enum Types in Symfony and PostgreSQL\u00a0\"}]},{\"@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\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/wata.es\/#organization\",\"name\":\"WATA Factory\",\"url\":\"https:\/\/wata.es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@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\":\"en-US\",\"@id\":\"https:\/\/wata.es\/#\/schema\/person\/image\/\",\"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\/author\/a-cardiel\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Working with Enum Types in Symfony and PostgreSQL\u00a0 - 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\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/","og_locale":"en_US","og_type":"article","og_title":"Working with Enum Types in Symfony and PostgreSQL\u00a0 - WATA Factory","og_description":"Sometimes we need a list of valid values for a certain field in the database. To this end, we can create a custom data type in Symfony and use it in our entity mapping definitions. That way, we can also use it in our validations. It\u2019s especially helpful when using PostgreSQL ENUM types.","og_url":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/","og_site_name":"WATA Factory","article_publisher":"https:\/\/www.facebook.com\/watafactory\/","article_published_time":"2022-10-18T07:00:00+00:00","article_modified_time":"2025-04-14T14:49:32+00:00","og_image":[{"width":1500,"height":800,"url":"https:\/\/wata.es\/wp-content\/uploads\/2020\/08\/symfony.png","type":"image\/png"}],"author":"\u00c1ngel Cardiel","twitter_card":"summary_large_image","twitter_creator":"@watafactory","twitter_site":"@watafactory","twitter_misc":{"Written by":"\u00c1ngel Cardiel","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#article","isPartOf":{"@id":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/"},"author":{"name":"\u00c1ngel Cardiel","@id":"https:\/\/wata.es\/#\/schema\/person\/20fa86a3206ff8e84e5771780c8e48f0"},"headline":"Working with Enum Types in Symfony and PostgreSQL\u00a0","datePublished":"2022-10-18T07:00:00+00:00","dateModified":"2025-04-14T14:49:32+00:00","mainEntityOfPage":{"@id":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/"},"wordCount":438,"publisher":{"@id":"https:\/\/wata.es\/#organization"},"image":{"@id":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#primaryimage"},"thumbnailUrl":"https:\/\/wata.es\/wp-content\/uploads\/2020\/08\/symfony.png","keywords":["php","symfony"],"articleSection":["News","Technology"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/","url":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/","name":"Working with Enum Types in Symfony and PostgreSQL\u00a0 - WATA Factory","isPartOf":{"@id":"https:\/\/wata.es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#primaryimage"},"image":{"@id":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#primaryimage"},"thumbnailUrl":"https:\/\/wata.es\/wp-content\/uploads\/2020\/08\/symfony.png","datePublished":"2022-10-18T07:00:00+00:00","dateModified":"2025-04-14T14:49:32+00:00","breadcrumb":{"@id":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#primaryimage","url":"https:\/\/wata.es\/wp-content\/uploads\/2020\/08\/symfony.png","contentUrl":"https:\/\/wata.es\/wp-content\/uploads\/2020\/08\/symfony.png","width":1500,"height":800},{"@type":"BreadcrumbList","@id":"https:\/\/wata.es\/migration-of-a-project-from-angular-7-to-angular-8-what-are-the-benefits-1-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/wata.es\/"},{"@type":"ListItem","position":2,"name":"Working with Enum Types in Symfony and PostgreSQL\u00a0"}]},{"@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":"en-US"},{"@type":"Organization","@id":"https:\/\/wata.es\/#organization","name":"WATA Factory","url":"https:\/\/wata.es\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@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":"en-US","@id":"https:\/\/wata.es\/#\/schema\/person\/image\/","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\/author\/a-cardiel\/"}]}},"_links":{"self":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts\/7443","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/users\/31"}],"replies":[{"embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/comments?post=7443"}],"version-history":[{"count":5,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts\/7443\/revisions"}],"predecessor-version":[{"id":11928,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/posts\/7443\/revisions\/11928"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/media\/6549"}],"wp:attachment":[{"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/media?parent=7443"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/categories?post=7443"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wata.es\/wp-json\/wp\/v2\/tags?post=7443"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}