{"id":5867,"date":"2026-04-07T19:10:34","date_gmt":"2026-04-07T22:10:34","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=5867"},"modified":"2026-04-07T19:14:29","modified_gmt":"2026-04-07T22:14:29","slug":"relacionando-tabelas-no-cakephp","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/","title":{"rendered":"Relacionando tabelas no CakePHP"},"content":{"rendered":"<span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 5<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>\n<p class=\"has-medium-font-size wp-block-paragraph\">Relacionando tabelas no CakePHP: Chegamos a um dos pilares mais poderosos do <strong>CakePHP<\/strong>. Se voc\u00ea j\u00e1 entende a diferen\u00e7a entre Tables e Entities, agora precisa aprender como conect\u00e1-las. No mundo real, os dados n\u00e3o vivem isolados; um artigo pertence a uma categoria, um autor possui muitos posts e um produto pode ter v\u00e1rias etiquetas.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Como especialista em desenvolvimento web, preparei este d\u00e9cimo artigo para ensinar voc\u00ea a dominar as <strong>Associa\u00e7\u00f5es<\/strong> no ORM do CakePHP. Esque\u00e7a as JOINs manuais complexas no SQL; vamos aprender a relacionar tabelas como um verdadeiro profissional, garantindo integridade e performance ao seu blog ou SaaS.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">Associa\u00e7\u00f5es (HasMany, BelongsTo): Relacionando tabelas como um profissional no CakePHP<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Relacionando tabelas no CakePHP: No desenvolvimento de sistemas, a modelagem de dados \u00e9 o que define o sucesso da aplica\u00e7\u00e3o. O CakePHP brilha nesse aspecto ao oferecer uma camada de abstra\u00e7\u00e3o que permite definir relacionamentos complexos com apenas algumas linhas de c\u00f3digo. Atrav\u00e9s das <strong>Associa\u00e7\u00f5es<\/strong>, o framework entende como navegar entre as tabelas, buscando dados relacionados de forma autom\u00e1tica e inteligente.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Neste artigo, vamos focar nos dois tipos de associa\u00e7\u00f5es mais comuns: <strong>BelongsTo<\/strong> (Pertence a) e <strong>HasMany<\/strong> (Tem muitos), al\u00e9m de dar uma pincelada no <strong>HasOne<\/strong> e <strong>BelongsToMany<\/strong>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">1. O que s\u00e3o Associa\u00e7\u00f5es no ORM?<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Associa\u00e7\u00f5es s\u00e3o defini\u00e7\u00f5es l\u00f3gicas no seu <strong>Table Object<\/strong> que dizem ao CakePHP como uma tabela se conecta a outra. Quando voc\u00ea define um relacionamento, o ORM ganha &#8220;superpoderes&#8221; para realizar consultas recursivas.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Por exemplo, se voc\u00ea buscar um &#8220;Artigo&#8221;, o CakePHP pode trazer automaticamente a &#8220;Categoria&#8221; ligada a ele e tamb\u00e9m todos os &#8220;Coment\u00e1rios&#8221; que aquele artigo recebeu. Tudo isso sem que voc\u00ea precise escrever uma \u00fanica linha de SQL <code>JOIN<\/code>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">2. BelongsTo: O Relacionamento &#8220;Filho para Pai&#8221;<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A associa\u00e7\u00e3o <strong>BelongsTo<\/strong> \u00e9 usada quando a tabela atual cont\u00e9m a chave estrangeira (<code>foreign key<\/code>) que aponta para outra tabela. \u00c9 o caso cl\u00e1ssico de um Artigo que pertence a uma Categoria.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>A Conven\u00e7\u00e3o:<\/strong> Para que o CakePHP identifique isso automaticamente, sua tabela <code>artigos<\/code> deve ter uma coluna chamada <code>categoria_id<\/code>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Configurando no Table Object (<code>ArtigosTable.php<\/code>)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>namespace App\\Model\\Table;\n\nuse Cake\\ORM\\Table;\n\nclass ArtigosTable extends Table \n{\n    public function initialize(array $config): void\n    {\n        parent::initialize($config);\n\n        \/\/ Um Artigo pertence a uma Categoria\n        $this-&gt;belongsTo('Categorias', &#91;\n            'foreignKey' =&gt; 'categoria_id',\n            'joinType' =&gt; 'INNER', \/\/ Garante que s\u00f3 traga artigos que tenham categoria\n        ]);\n    }\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>O que isso faz na pr\u00e1tica?<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Quando voc\u00ea estiver no seu <code>ArtigosController<\/code> e fizer uma busca usando o m\u00e9todo <code>contain<\/code>, o CakePHP trar\u00e1 o objeto da categoria dentro da entidade do artigo:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>$artigo = $this-&gt;Artigos-&gt;find()\n    -&gt;contain(&#91;'Categorias'])\n    -&gt;first();\n\necho $artigo-&gt;categoria-&gt;nome; \/\/ A m\u00e1gica acontece aqui!\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">3. HasMany: O Relacionamento &#8220;Pai para Filhos&#8221;<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A associa\u00e7\u00e3o <strong>HasMany<\/strong> \u00e9 o inverso da anterior. Ela \u00e9 definida na tabela que &#8220;\u00e9 dona&#8221; da rela\u00e7\u00e3o, ou seja, na tabela que <strong>n\u00e3o<\/strong> tem a chave estrangeira. Uma Categoria tem muitos Artigos.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Configurando no Table Object (<code>CategoriasTable.php<\/code>)<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>namespace App\\Model\\Table;\n\nuse Cake\\ORM\\Table;\n\nclass CategoriasTable extends Table \n{\n    public function initialize(array $config): void\n    {\n        parent::initialize($config);\n\n        \/\/ Uma Categoria possui muitos Artigos\n        $this-&gt;hasMany('Artigos', &#91;\n            'foreignKey' =&gt; 'categoria_id',\n            'dependent' =&gt; true, \/\/ Se deletar a categoria, deleta os artigos (opcional)\n            'cascadeCallbacks' =&gt; true,\n        ]);\n    }\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Resultado:<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Ao buscar uma Categoria, voc\u00ea pode listar todos os seus artigos de uma vez:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>$categoria = $this-&gt;Categorias-&gt;get($id, &#91;'contain' =&gt; &#91;'Artigos']]);\n\nforeach ($categoria-&gt;artigos as $artigo) {\n    echo $artigo-&gt;titulo;\n}\n<\/code><\/pre>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">4. Diferen\u00e7a entre HasOne e BelongsTo<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Muitos desenvolvedores confundem esses dois. A regra de ouro para nunca mais errar \u00e9 olhar <strong>onde est\u00e1 a chave estrangeira<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">Se a chave (<code>perfil_id<\/code> ou <code>usuario_id<\/code>) est\u00e1 na tabela que voc\u00ea est\u00e1 editando -> use <strong>BelongsTo<\/strong>.<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Se a chave est\u00e1 na <strong>outra<\/strong> tabela -> use <strong>HasOne<\/strong>.<\/li>\n<\/ul>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Exemplo:<\/strong> Um Usu\u00e1rio tem um Perfil. A tabela <code>perfis<\/code> tem a coluna <code>usuario_id<\/code>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">Em <code>UsuariosTable<\/code>: <code>$this->hasOne('Perfis');<\/code><\/li>\n\n\n\n<li class=\"has-medium-font-size\">Em <code>PerfisTable<\/code>: <code>$this->belongsTo('Usuarios');<\/code><\/li>\n<\/ul>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">5. Associa\u00e7\u00f5es Complexas: BelongsToMany (N para N)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">\u00c0s vezes, um artigo pode ter v\u00e1rias etiquetas (Tags), e uma etiqueta pode estar em v\u00e1rios artigos. Isso cria uma tabela intermedi\u00e1ria (tabela de liga\u00e7\u00e3o), geralmente chamada de <code>artigos_tags<\/code>.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Configurando em <code>ArtigosTable.php<\/code>:<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>$this-&gt;belongsToMany('Tags', &#91;\n    'through' =&gt; 'ArtigosTags', \/\/ Opcional, se quiser controlar a tabela de liga\u00e7\u00e3o\n    'foreignKey' =&gt; 'artigo_id',\n    'targetForeignKey' =&gt; 'tag_id',\n]);\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O CakePHP cuidar\u00e1 de inserir e remover registros da tabela de liga\u00e7\u00e3o automaticamente quando voc\u00ea salvar um artigo com uma lista de tags selecionadas.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">6. O Poder do M\u00e9todo <code>contain()<\/code><\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">A grande estrela das associa\u00e7\u00f5es no CakePHP \u00e9 o m\u00e9todo <code>contain()<\/code>. Ele permite que voc\u00ea monte \u00e1rvores de dados complexas em uma \u00fanica consulta. No seu blog, voc\u00ea pode querer buscar um Artigo, a Categoria dele, o Autor e os \u00faltimos 5 Coment\u00e1rios aprovados:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">PHP<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>$query = $this-&gt;Artigos-&gt;find()\n    -&gt;contain(&#91;\n        'Categorias',\n        'Autores.Perfis', \/\/ Associa\u00e7\u00f5es aninhadas!\n        'Comentarios' =&gt; function ($q) {\n            return $q-&gt;where(&#91;'aprovado' =&gt; true])-&gt;limit(5);\n        }\n    ]);\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Isso \u00e9 o que chamamos de <strong>Eager Loading<\/strong> (Carregamento Ansioso). O CakePHP otimiza as queries para trazer tudo o que voc\u00ea pediu da forma mais perform\u00e1tica poss\u00edvel.<\/p>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">7. Boas Pr\u00e1ticas ao Relacionar Tabelas<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para manter seu sistema profissional e evitar lentid\u00e3o, siga estas diretrizes:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Siga as Conven\u00e7\u00f5es:<\/strong> Sempre use <code>tabela_id<\/code> para chaves estrangeiras. Isso economiza dezenas de linhas de configura\u00e7\u00e3o manual.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>N\u00e3o abuse do Contain:<\/strong> Busque apenas o que voc\u00ea vai usar na tela. Trazer associa\u00e7\u00f5es demais sem necessidade consome mem\u00f3ria do servidor.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Cuidado com o Delete Cascade:<\/strong> Use <code>'dependent' => true<\/code> com cautela. Voc\u00ea n\u00e3o quer apagar todos os usu\u00e1rios do site s\u00f3 porque deletou uma &#8220;Regi\u00e3o&#8221;, por exemplo.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Use o Bake:<\/strong> O comando <code>bin\/cake bake all<\/code> que vimos no artigo 8 identifica automaticamente <code>belongsTo<\/code> e <code>hasMany<\/code> se voc\u00ea seguiu as conven\u00e7\u00f5es de nomes no banco de dados.<\/li>\n<\/ol>\n\n\n\n<div style=\"height:35px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading has-large-font-size\">Conclus\u00e3o: A Teia de Dados do seu Sistema<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Dominar as <strong>Associa\u00e7\u00f5es no CakePHP<\/strong> \u00e9 o que transforma uma aplica\u00e7\u00e3o simples em um sistema de n\u00edvel empresarial. Quando voc\u00ea entende como o <code>BelongsTo<\/code> e o <code>HasMany<\/code> funcionam, a modelagem do seu banco de dados se torna uma ferramenta de produtividade, e n\u00e3o um obst\u00e1culo.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Com tabelas bem relacionadas, seu c\u00f3digo fica mais limpo, suas consultas mais poderosas e a manuten\u00e7\u00e3o do sistema se torna muito mais simples. Voc\u00ea parou de pensar em &#8220;tabelas isoladas&#8221; e come\u00e7ou a pensar em um <strong>Ecossistema de Informa\u00e7\u00e3o<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Mas antes de dominar o CakePHP, se for o seu caso, toda jornada tem um in\u00edcio. Vamos entender quais s\u00e3o os conhecimentos b\u00e1sicos necess\u00e1rios para aproveitar ao m\u00e1ximo este poderoso framework. Para iniciar seus estudos no CakePHP, voc\u00ea precisar\u00e1 dominar as seguintes tecnologias:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/html\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp\" alt=\"HTML\" class=\"wp-image-600\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/html-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">HTML<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/css\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp\" alt=\"CSS\" class=\"wp-image-702\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/Capa-Artigos-Linux-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">CSS<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/javascript\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp\" alt=\"Javascript\" class=\"wp-image-804\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/javascript-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">JavaScript<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/sql\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp\" alt=\"SQL\" class=\"wp-image-942\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2.webp 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/05\/Capa-Artigos-2-300x169.webp 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">SQL<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"\/blog\/categoria\/php\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"758\" height=\"426\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png\" alt=\"Capa Curso PHP\" class=\"wp-image-2835\" srcset=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP.png 758w, https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/11\/Capa-PHP-300x169.png 300w\" sizes=\"auto, (max-width: 758px) 100vw, 758px\" \/><\/a><figcaption class=\"wp-element-caption\">PHP<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">E se voc\u00ea gosta do nosso conte\u00fado, n\u00e3o deixe de contribuir adquirindo os servi\u00e7os e produtos dos nossos apoiadores e empresas que somos associados.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-8f761849 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/hostinger.com.br\/?REFERRALCODE=1THIAGO62\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/03\/hostinger.png\" alt=\"Hospedagem Hostinger\" class=\"wp-image-92\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNDYlc\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/ofertas-amazon.webp\" alt=\"Ofertas Amazon\" class=\"wp-image-1308\"\/><\/a><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/amzn.to\/3SNKmt0\" target=\"_blank\" rel=\" noreferrer noopener\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"250\" src=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/08\/amazonprime.webp\" alt=\"Amazon Prime\" class=\"wp-image-1307\"\/><\/a><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Agora que seus dados est\u00e3o devidamente conectados, precisamos garantir que apenas informa\u00e7\u00f5es v\u00e1lidas entrem no sistema. No pr\u00f3ximo artigo, veremos: <strong>&#8220;Validation &amp; BuildRules: Como garantir que apenas dados limpos entrem no banco.&#8221;<\/strong><\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>Dica de Ouro:<\/strong> Se voc\u00ea estiver com problemas para ver os dados associados na sua View, lembre-se de usar o <code>debug($artigo)<\/code> no seu controller. Verifique se a propriedade da associa\u00e7\u00e3o (ex: <code>$artigo-&gt;categoria<\/code>) est\u00e1 presente. Se n\u00e3o estiver, voc\u00ea provavelmente esqueceu de adicionar o <code>-&gt;contain(['Categorias'])<\/code> na sua query!<\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"span-reading-time rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Tempo de leitura: <\/span> <span class=\"rt-time\"> 5<\/span> <span class=\"rt-label rt-postfix\">minutos<\/span><\/span>Relacionando tabelas no CakePHP: Chegamos a um dos pilares mais poderosos do CakePHP. Se voc\u00ea&#8230;<\/p>\n","protected":false},"author":1,"featured_media":5819,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[97],"tags":[],"class_list":["post-5867","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cakephp","wpcat-97-id"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.9 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Relacionando tabelas no CakePHP - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"Relacionando tabelas no CakePHP: No desenvolvimento de sistemas, a modelagem de dados \u00e9 o que define o sucesso da aplica\u00e7\u00e3o. O Cake brilha...\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Relacionando tabelas no CakePHP - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"Relacionando tabelas no CakePHP: No desenvolvimento de sistemas, a modelagem de dados \u00e9 o que define o sucesso da aplica\u00e7\u00e3o. O Cake brilha...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-07T22:10:34+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-07T22:14:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png\" \/>\n\t<meta property=\"og:image:width\" content=\"758\" \/>\n\t<meta property=\"og:image:height\" content=\"426\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Thiago Rossi\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Thiago Rossi\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. tempo de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Relacionando tabelas no CakePHP\",\"datePublished\":\"2026-04-07T22:10:34+00:00\",\"dateModified\":\"2026-04-07T22:14:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/\"},\"wordCount\":1033,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"articleSection\":[\"CakePHP\"],\"inLanguage\":\"pt-BR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/\",\"name\":\"Relacionando tabelas no CakePHP - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"datePublished\":\"2026-04-07T22:10:34+00:00\",\"dateModified\":\"2026-04-07T22:14:29+00:00\",\"description\":\"Relacionando tabelas no CakePHP: No desenvolvimento de sistemas, a modelagem de dados \u00e9 o que define o sucesso da aplica\u00e7\u00e3o. O Cake brilha...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"width\":758,\"height\":426,\"caption\":\"CakePHP\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/relacionando-tabelas-no-cakephp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Relacionando tabelas no CakePHP\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"name\":\"THIAGO ROSSI\",\"description\":\"Mais de 20 anos de experi\u00eancia no mercado de TI!\",\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"alternateName\":\"TR | CURSO WEB DEV\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\",\"name\":\"THIAGO ROSSI\",\"alternateName\":\"TR | CURSO WEB DEV\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"contentUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/new-logo.webp\",\"width\":300,\"height\":300,\"caption\":\"THIAGO ROSSI\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\",\"name\":\"Thiago Rossi\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g\",\"caption\":\"Thiago Rossi\"},\"description\":\"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \\\"GDD \u2013 O Guia Definitivo\\\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.\",\"sameAs\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\",\"https:\\\/\\\/instagram.com\\\/thiagorossix86\",\"https:\\\/\\\/linkedin.com\\\/in\\\/thiagox86\"],\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/author\\\/thiagorossi\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Relacionando tabelas no CakePHP - BLOG THIAGO ROSSI","description":"Relacionando tabelas no CakePHP: No desenvolvimento de sistemas, a modelagem de dados \u00e9 o que define o sucesso da aplica\u00e7\u00e3o. O Cake brilha...","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:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/","og_locale":"pt_BR","og_type":"article","og_title":"Relacionando tabelas no CakePHP - BLOG THIAGO ROSSI","og_description":"Relacionando tabelas no CakePHP: No desenvolvimento de sistemas, a modelagem de dados \u00e9 o que define o sucesso da aplica\u00e7\u00e3o. O Cake brilha...","og_url":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2026-04-07T22:10:34+00:00","article_modified_time":"2026-04-07T22:14:29+00:00","og_image":[{"width":758,"height":426,"url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","type":"image\/png"}],"author":"Thiago Rossi","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"Thiago Rossi","Est. tempo de leitura":"8 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Relacionando tabelas no CakePHP","datePublished":"2026-04-07T22:10:34+00:00","dateModified":"2026-04-07T22:14:29+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/"},"wordCount":1033,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","articleSection":["CakePHP"],"inLanguage":"pt-BR"},{"@type":"WebPage","@id":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/","url":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/","name":"Relacionando tabelas no CakePHP - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","datePublished":"2026-04-07T22:10:34+00:00","dateModified":"2026-04-07T22:14:29+00:00","description":"Relacionando tabelas no CakePHP: No desenvolvimento de sistemas, a modelagem de dados \u00e9 o que define o sucesso da aplica\u00e7\u00e3o. O Cake brilha...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/#primaryimage","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","width":758,"height":426,"caption":"CakePHP"},{"@type":"BreadcrumbList","@id":"https:\/\/thiagorossi.com.br\/blog\/relacionando-tabelas-no-cakephp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Relacionando tabelas no CakePHP"}]},{"@type":"WebSite","@id":"https:\/\/thiagorossi.com.br\/blog\/#website","url":"https:\/\/thiagorossi.com.br\/blog\/","name":"THIAGO ROSSI","description":"Mais de 20 anos de experi\u00eancia no mercado de TI!","publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"alternateName":"TR | CURSO WEB DEV","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thiagorossi.com.br\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/thiagorossi.com.br\/blog\/#organization","name":"THIAGO ROSSI","alternateName":"TR | CURSO WEB DEV","url":"https:\/\/thiagorossi.com.br\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","contentUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2024\/04\/new-logo.webp","width":300,"height":300,"caption":"THIAGO ROSSI"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/linkedin.com\/in\/thiagox86"]},{"@type":"Person","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87","name":"Thiago Rossi","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/bb28b4665f4162bab9fbef8db5a7f00597f79ab90ece9a67189bb6bce78d5786?s=96&d=retro&r=g","caption":"Thiago Rossi"},"description":"Com mais de 20 anos de jornada na tecnologia, minha trajet\u00f3ria evoluiu do ensino t\u00e9cnico \u00e0 arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de solu\u00e7\u00f5es de Intelig\u00eancia Artificial nativa e an\u00e1lise de dados p\u00fablicos, utilizando o ecossistema PHP para transformar dados brutos em transpar\u00eancia e efici\u00eancia. Como autor e desenvolvedor, acredito na democratiza\u00e7\u00e3o do conhecimento. Essa vis\u00e3o resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura at\u00e9 os bastidores da ind\u00fastria de Jogos e IA. No universo de Game Design, sou autor do livro \"GDD \u2013 O Guia Definitivo\" e documento ativamente meus processos atrav\u00e9s de DevLogs, unindo rigor t\u00e9cnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso \u00e9 conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.","sameAs":["https:\/\/thiagorossi.com.br\/blog","https:\/\/instagram.com\/thiagorossix86","https:\/\/linkedin.com\/in\/thiagox86"],"url":"https:\/\/thiagorossi.com.br\/blog\/author\/thiagorossi\/"}]}},"_links":{"self":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/comments?post=5867"}],"version-history":[{"count":2,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5867\/revisions"}],"predecessor-version":[{"id":5869,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5867\/revisions\/5869"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media\/5819"}],"wp:attachment":[{"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/media?parent=5867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=5867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=5867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}