{"id":5855,"date":"2026-04-05T20:19:05","date_gmt":"2026-04-05T23:19:05","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=5855"},"modified":"2026-04-05T21:36:02","modified_gmt":"2026-04-06T00:36:02","slug":"cakephp-migrations","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/","title":{"rendered":"CakePHP Migrations"},"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\">CakePHP Migrations: Se voc\u00ea j\u00e1 passou pela experi\u00eancia frustrante de atualizar um site e ele &#8220;quebrar&#8221; porque voc\u00ea esqueceu de criar uma coluna no banco de dados de produ\u00e7\u00e3o, este artigo foi escrito para voc\u00ea. Como especialista em <strong>CakePHP<\/strong>, posso afirmar: o uso de <strong>Migrations<\/strong> \u00e9 o que separa um programador amador de um engenheiro de software profissional.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Neste sexto cap\u00edtulo da nossa trilha, vamos aprender a tratar o seu banco de dados como se fosse c\u00f3digo. Chega de exportar arquivos <code>.sql<\/code> ou enviar prints de tabelas para seus colegas. Vamos dominar o controle de vers\u00e3o do banco de dados com <strong>Migrations na Pr\u00e1tica<\/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\">Migrations na Pr\u00e1tica: Controlando a vers\u00e3o do seu banco de dados no CakePHP<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">CakePHP Migrations: Imagine que voc\u00ea est\u00e1 trabalhando em uma equipe. Voc\u00ea cria a tabela de &#8220;Coment\u00e1rios&#8221;, adiciona tr\u00eas colunas e segue desenvolvendo. Quando seu colega baixa o c\u00f3digo pelo Git, o sistema dele para de funcionar. Por qu\u00ea? Porque o c\u00f3digo espera uma tabela que n\u00e3o existe no banco de dados dele.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No passado, resolver\u00edamos isso enviando um dump do banco ou um script SQL via chat. Hoje, usamos <strong>Migrations<\/strong>. No CakePHP, isso \u00e9 feito atrav\u00e9s do plugin <strong>Migrations<\/strong> (baseado no Phinx), que permite que voc\u00ea descreva as altera\u00e7\u00f5es no banco de dados usando PHP puro.<\/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 Migrations e por que us\u00e1-las?<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Migrations s\u00e3o como um &#8220;Git para o seu banco de dados&#8221;. Elas permitem que voc\u00ea crie, altere e remova tabelas e colunas de forma incremental e revers\u00edvel.<\/p>\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>As vantagens s\u00e3o claras:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Hist\u00f3rico:<\/strong> Voc\u00ea sabe exatamente quando e por que uma coluna foi adicionada.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Sincroniza\u00e7\u00e3o:<\/strong> Toda a equipe (e o servidor de produ\u00e7\u00e3o) ter\u00e1 exatamente a mesma estrutura de banco.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Seguran\u00e7a:<\/strong> Se algo der errado, voc\u00ea pode dar um &#8220;rollback&#8221; e voltar o banco ao estado anterior em segundos.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Independ\u00eancia de Banco:<\/strong> Voc\u00ea escreve em PHP, e o CakePHP traduz para o SQL do MySQL, PostgreSQL ou SQL Server.<\/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\">2. Instalando e Configurando o Plugin<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Embora o esqueleto padr\u00e3o do CakePHP j\u00e1 traga o plugin de Migrations, \u00e9 sempre bom garantir que ele est\u00e1 carregado no seu arquivo <code>src\/Application.php<\/code>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para verificar se voc\u00ea tem a CLI pronta, rode:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>bin\/cake migrations --help\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Se o comando retornar uma lista de op\u00e7\u00f5es, seu &#8220;forno&#8221; est\u00e1 pronto para processar as migra\u00e7\u00f5es.<\/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\">3. Criando sua Primeira Migration<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Vamos supor que precisamos criar a tabela <code>artigos<\/code> que mencionamos nos artigos anteriores. Em vez de abrir o phpMyAdmin, vamos usar o terminal.<\/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\">O Comando de Gera\u00e7\u00e3o<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Execute:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>bin\/cake bake migration CreateArtigos titulo:string corpo:text publicado:boolean created modified\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O CakePHP \u00e9 inteligente: ao usar o prefixo <code>Create<\/code>, ele j\u00e1 entende que voc\u00ea quer criar uma nova tabela. Ele gerar\u00e1 um arquivo dentro de <code>config\/Migrations\/<\/code> com um nome parecido com <code>20260405120000_CreateArtigos.php<\/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\">Anatomia do Arquivo de Migration<\/h3>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Abra o arquivo gerado. Voc\u00ea ver\u00e1 algo assim:<\/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>use Migrations\\AbstractMigration;\n\nclass CreateArtigos extends AbstractMigration\n{\n    public function change(): void\n    {\n        $table = $this-&gt;table('artigos');\n        $table-&gt;addColumn('titulo', 'string', &#91;'limit' =&gt; 150, 'null' =&gt; false])\n              -&gt;addColumn('corpo', 'text', &#91;'null' =&gt; true])\n              -&gt;addColumn('publicado', 'boolean', &#91;'default' =&gt; false])\n              -&gt;addColumn('created', 'datetime')\n              -&gt;addColumn('modified', 'datetime')\n              -&gt;create();\n    }\n}\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Perceba que n\u00e3o h\u00e1 SQL aqui. \u00c9 uma linguagem flu\u00edda e f\u00e1cil de ler. O m\u00e9todo <code>change()<\/code> \u00e9 m\u00e1gico: ele sabe como criar a tabela e, se voc\u00ea pedir um rollback, ele sabe como delet\u00e1-la automaticamente.<\/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\">4. Executando as Migra\u00e7\u00f5es (Migrate)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Criar o arquivo n\u00e3o altera o banco de dados ainda. Para aplicar as mudan\u00e7as, voc\u00ea precisa rodar o comando:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>bin\/cake migrations migrate\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O CakePHP criar\u00e1 a tabela <code>artigos<\/code> e tamb\u00e9m uma tabela auxiliar chamada <code>phinxlog<\/code>, onde ele anota quais migra\u00e7\u00f5es j\u00e1 foram executadas para nunca repetir o mesmo processo.<\/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\">5. Alterando Tabelas Existentes<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">E se, daqui a um m\u00eas, voc\u00ea decidir que os artigos precisam de uma coluna <code>autor_id<\/code>? Voc\u00ea <strong>nunca<\/strong> deve editar a migration original que j\u00e1 foi executada. Em vez disso, crie uma nova:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>bin\/cake bake migration AddAutorIdToArtigos autor_id:integer\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O arquivo gerado usar\u00e1 o m\u00e9todo <code>update()<\/code> na tabela <code>artigos<\/code> para adicionar o novo campo. Simples e seguro.<\/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 Rollback: Voltando no Tempo<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Cometeu um erro? A nova coluna quebrou o sistema? N\u00e3o entre em p\u00e2nico.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Rode:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>bin\/cake migrations rollback\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O CakePHP desfar\u00e1 a \u00faltima migra\u00e7\u00e3o executada, removendo a coluna ou tabela que voc\u00ea acabou de criar e devolvendo o banco ao estado est\u00e1vel anterior.<\/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. Seeds: Alimentando o Banco de Dados<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Al\u00e9m da estrutura (DDL), muitas vezes precisamos de dados iniciais (DML), como um usu\u00e1rio administrador padr\u00e3o ou uma lista de categorias. Para isso, usamos os <strong>Seeds<\/strong>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Crie um Seed:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>bin\/cake bake seed CategoriasSeed\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No arquivo <code>config\/Seeds\/CategoriasSeed.php<\/code>, voc\u00ea define os dados:<\/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>public function run(): void\n{\n    $data = &#91;\n        &#91;'nome' =&gt; 'Desenvolvimento Web', 'slug' =&gt; 'web-dev'],\n        &#91;'nome' =&gt; 'Infraestrutura', 'slug' =&gt; 'infra'],\n    ];\n\n    $table = $this-&gt;table('categorias');\n    $table-&gt;insert($data)-&gt;save();\n}\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para executar e popular seu banco:<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Bash<\/p>\n\n\n\n<pre class=\"wp-block-code has-medium-font-size\"><code>bin\/cake migrations seed\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\">8. Boas Pr\u00e1ticas de Migrations no CakePHP<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para manter seus projetos saud\u00e1veis, siga estas regras:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Migrations s\u00e3o Imut\u00e1veis:<\/strong> Uma vez que uma migration foi para o servidor de produ\u00e7\u00e3o, <strong>jamais<\/strong> a edite. Se precisar mudar algo, crie uma nova migration.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Nomes Descritivos:<\/strong> Use nomes como <code>AddPrecoToProdutos<\/code> ou <code>RenameDescricaoToResumo<\/code>.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Check-in no Git:<\/strong> Os arquivos de migration devem obrigatoriamente subir para o seu reposit\u00f3rio Git.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Cuidado com Dados Existentes:<\/strong> Ao adicionar uma coluna <code>NOT NULL<\/code> em uma tabela que j\u00e1 tem dados, lembre-se de definir um valor <code>default<\/code> para n\u00e3o dar erro na execu\u00e7\u00e3o.<\/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 Paz de Esp\u00edrito de um Banco Versionado<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Dominar as <strong>Migrations no CakePHP<\/strong> transforma a forma como voc\u00ea encara o deploy. Aquele medo de &#8220;esqueci de rodar o SQL no servidor&#8221; desaparece. Agora, seu processo de atualiza\u00e7\u00e3o se resume a dois comandos: <code>git pull<\/code> e <code>bin\/cake migrations migrate<\/code>.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Com o banco de dados versionado e organizado, voc\u00ea est\u00e1 pronto para o pr\u00f3ximo passo t\u00e9cnico: configurar a conex\u00e3o real do seu c\u00f3digo com esse banco. No pr\u00f3ximo artigo, veremos: <strong>&#8220;Conectando ao Banco: Configurando o app_local.php.&#8221;<\/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\">Se voc\u00ea j\u00e1 usava migrations em outros frameworks (como Laravel ou Django), vai se sentir em casa. Se nunca usou, parab\u00e9ns: voc\u00ea acaba de dar o passo mais importante para a automa\u00e7\u00e3o profissional dos seus projetos.<\/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>CakePHP Migrations: Se voc\u00ea j\u00e1 passou pela experi\u00eancia frustrante de atualizar um site e ele&#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-5855","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>CakePHP Migrations - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"CakePHP Migrations: Imagine que voc\u00ea est\u00e1 trabalhando em uma equipe. Voc\u00ea cria a tabela de &quot;Coment\u00e1rios&quot;, adiciona tr\u00eas colunas e segue ...\" \/>\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\/cakephp-migrations\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"CakePHP Migrations - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"CakePHP Migrations: Imagine que voc\u00ea est\u00e1 trabalhando em uma equipe. Voc\u00ea cria a tabela de &quot;Coment\u00e1rios&quot;, adiciona tr\u00eas colunas e segue ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-05T23:19:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-06T00:36:02+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\\\/cakephp-migrations\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-migrations\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"CakePHP Migrations\",\"datePublished\":\"2026-04-05T23:19:05+00:00\",\"dateModified\":\"2026-04-06T00:36:02+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-migrations\\\/\"},\"wordCount\":1028,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-migrations\\\/#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\\\/cakephp-migrations\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-migrations\\\/\",\"name\":\"CakePHP Migrations - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-migrations\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-migrations\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"datePublished\":\"2026-04-05T23:19:05+00:00\",\"dateModified\":\"2026-04-06T00:36:02+00:00\",\"description\":\"CakePHP Migrations: Imagine que voc\u00ea est\u00e1 trabalhando em uma equipe. Voc\u00ea cria a tabela de \\\"Coment\u00e1rios\\\", adiciona tr\u00eas colunas e segue ...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-migrations\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-migrations\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/cakephp-migrations\\\/#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\\\/cakephp-migrations\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"CakePHP Migrations\"}]},{\"@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":"CakePHP Migrations - BLOG THIAGO ROSSI","description":"CakePHP Migrations: Imagine que voc\u00ea est\u00e1 trabalhando em uma equipe. Voc\u00ea cria a tabela de \"Coment\u00e1rios\", adiciona tr\u00eas colunas e segue ...","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\/cakephp-migrations\/","og_locale":"pt_BR","og_type":"article","og_title":"CakePHP Migrations - BLOG THIAGO ROSSI","og_description":"CakePHP Migrations: Imagine que voc\u00ea est\u00e1 trabalhando em uma equipe. Voc\u00ea cria a tabela de \"Coment\u00e1rios\", adiciona tr\u00eas colunas e segue ...","og_url":"https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2026-04-05T23:19:05+00:00","article_modified_time":"2026-04-06T00:36:02+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\/cakephp-migrations\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"CakePHP Migrations","datePublished":"2026-04-05T23:19:05+00:00","dateModified":"2026-04-06T00:36:02+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/"},"wordCount":1028,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/#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\/cakephp-migrations\/","url":"https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/","name":"CakePHP Migrations - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","datePublished":"2026-04-05T23:19:05+00:00","dateModified":"2026-04-06T00:36:02+00:00","description":"CakePHP Migrations: Imagine que voc\u00ea est\u00e1 trabalhando em uma equipe. Voc\u00ea cria a tabela de \"Coment\u00e1rios\", adiciona tr\u00eas colunas e segue ...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/cakephp-migrations\/#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\/cakephp-migrations\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"CakePHP Migrations"}]},{"@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\/5855","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=5855"}],"version-history":[{"count":2,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5855\/revisions"}],"predecessor-version":[{"id":5858,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5855\/revisions\/5858"}],"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=5855"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=5855"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=5855"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}