{"id":5864,"date":"2026-04-07T16:52:53","date_gmt":"2026-04-07T19:52:53","guid":{"rendered":"https:\/\/thiagorossi.com.br\/blog\/?p=5864"},"modified":"2026-04-07T16:53:46","modified_gmt":"2026-04-07T19:53:46","slug":"manipulacao-de-dados-no-cakephp","status":"publish","type":"post","link":"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-no-cakephp\/","title":{"rendered":"Manipula\u00e7\u00e3o de dados 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\">Manipula\u00e7\u00e3o de dados no CakePHP: Se voc\u00ea j\u00e1 usou o comando <strong>Bake<\/strong> que vimos no artigo anterior, deve ter notado que o CakePHP criou dois arquivos diferentes dentro da pasta <code>src\/Model\/<\/code>: um dentro de <code>Table<\/code> e outro dentro de <code>Entity<\/code>. Para quem vem de outros frameworks ou do PHP estruturado, essa divis\u00e3o pode causar uma certa confus\u00e3o inicial. Afinal, por que dois arquivos para representar &#8220;o banco de dados&#8221;?<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Como especialista em <strong>CakePHP<\/strong>, preparei este nono artigo para desmistificar o cora\u00e7\u00e3o do ORM (Object-Relational Mapping). Vamos entender a diferen\u00e7a vital entre <strong>Table Objects<\/strong> e <strong>Entities<\/strong> e como essa separa\u00e7\u00e3o eleva a organiza\u00e7\u00e3o do seu c\u00f3digo a um n\u00edvel profissional.<\/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\">Table Objects vs Entities: Entendendo a manipula\u00e7\u00e3o de dados no CakePHP<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No CakePHP, a camada de Model n\u00e3o \u00e9 uma classe \u00fanica e gigante. Ela \u00e9 dividida para respeitar o princ\u00edpio da responsabilidade \u00fanica. Enquanto o <strong>Table Object<\/strong> cuida da &#8220;cole\u00e7\u00e3o&#8221; de dados (a tabela como um todo), a <strong>Entity<\/strong> cuida do &#8220;item&#8221; individual (uma linha espec\u00edfica daquela tabela).<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Entender essa dualidade \u00e9 a chave para manipular dados com eleg\u00e2ncia, criar valida\u00e7\u00f5es poderosas e manter a l\u00f3gica de neg\u00f3cio no lugar certo.<\/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 \u00e9 um Table Object? (A Vis\u00e3o da Tabela)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Imagine o <strong>Table Object<\/strong> como o guardi\u00e3o da tabela do banco de dados. Ele \u00e9 o respons\u00e1vel por tudo o que envolve o conjunto de dados e as regras de como esses dados entram e saem do banco.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Localizado em <code>src\/Model\/Table\/<\/code>, o Table Object \u00e9 onde voc\u00ea define:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Configura\u00e7\u00f5es de Schema:<\/strong> Qual o nome da tabela e qual a chave prim\u00e1ria.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Associa\u00e7\u00f5es:<\/strong> Como esta tabela se relaciona com outras (HasMany, BelongsTo).<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Valida\u00e7\u00f5es:<\/strong> Regras de integridade (ex: &#8220;o campo e-mail \u00e9 obrigat\u00f3rio&#8221;).<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Behaviors:<\/strong> Comportamentos reutiliz\u00e1veis (ex: &#8220;Timestamp&#8221; para datas autom\u00e1ticas).<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Finders Customizados:<\/strong> Consultas personalizadas (ex: <code>find('publicados')<\/code>).<\/li>\n<\/ul>\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\">Exemplo de 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;\nuse Cake\\Validation\\Validator;\n\nclass ArtigosTable extends Table \n{\n    public function initialize(array $config): void\n    {\n        parent::initialize($config);\n        \n        $this-&gt;setTable('artigos');\n        $this-&gt;setDisplayField('titulo');\n        $this-&gt;setPrimaryKey('id');\n\n        $this-&gt;addBehavior('Timestamp');\n\n        \/\/ Relacionamento: Um artigo pertence a uma categoria\n        $this-&gt;belongsTo('Categorias', &#91;\n            'foreignKey' =&gt; 'categoria_id',\n        ]);\n    }\n\n    public function validationDefault(Validator $validator): Validator\n    {\n        $validator\n            -&gt;scalar('titulo')\n            -&gt;minLength('titulo', 10, 'O t\u00edtulo \u00e9 muito curto')\n            -&gt;notEmptyString('titulo', 'Ei, esqueceu o t\u00edtulo!');\n\n        return $validator;\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<h2 class=\"wp-block-heading has-large-font-size\">2. O que \u00e9 uma Entity? (A Vis\u00e3o do Registro)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Se o Table Object \u00e9 o &#8220;gerente da biblioteca&#8221;, a <strong>Entity<\/strong> \u00e9 o &#8220;livro individual&#8221;. A Entity representa uma \u00fanica linha do seu banco de dados transformada em um objeto PHP vivo.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Localizada em <code>src\/Model\/Entity\/<\/code>, a Entity \u00e9 o lugar perfeito para:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Acessores e Mutadores:<\/strong> Criar propriedades virtuais ou formatar dados na hora de exibir.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>L\u00f3gica de Objeto \u00danico:<\/strong> Verificar se um usu\u00e1rio espec\u00edfico tem permiss\u00e3o para algo.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>Tratamento de Dados Sens\u00edveis:<\/strong> Esconder campos como &#8220;senha&#8221; ao converter para JSON.<\/li>\n<\/ul>\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\">Exemplo de Entity (<code>Artigo.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\\Entity;\n\nuse Cake\\ORM\\Entity;\n\nclass Artigo extends Entity\n{\n    \/\/ Define quais campos podem ser preenchidos em massa (Mass Assignment)\n    protected array $_accessible = &#91;\n        'titulo' =&gt; true,\n        'corpo' =&gt; true,\n        'categoria_id' =&gt; true,\n        'created' =&gt; true,\n        'modified' =&gt; true,\n        'id' =&gt; false, \/\/ Seguran\u00e7a: ID n\u00e3o pode ser alterado via formul\u00e1rio\n    ];\n\n    \/\/ Propriedade Virtual: Gera um slug ou t\u00edtulo formatado automaticamente\n    protected function _getTituloFormatado(): string\n    {\n        return strtoupper($this-&gt;titulo);\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<h2 class=\"wp-block-heading has-large-font-size\">3. Na Pr\u00e1tica: Onde eu coloco minha l\u00f3gica?<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Esta \u00e9 a d\u00favida campe\u00e3 de 10 entre 10 desenvolvedores iniciantes. Vamos usar uma regra simples:<\/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\">Coloque no Table Object se:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">Voc\u00ea precisa buscar dados (<code>find<\/code>, <code>get<\/code>).<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Voc\u00ea precisa salvar ou deletar dados.<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Voc\u00ea quer validar se o e-mail \u00e9 \u00fanico no banco de dados.<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Voc\u00ea quer aplicar uma regra que afeta todas as inser\u00e7\u00f5es daquela tabela.<\/li>\n<\/ul>\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\">Coloque na Entity se:<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\">Voc\u00ea quer criar uma propriedade &#8220;nome_completo&#8221; juntando &#8220;nome&#8221; + &#8220;sobrenome&#8221;.<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Voc\u00ea quer formatar uma data para o padr\u00e3o brasileiro <code>d\/m\/Y<\/code> sempre que ela for exibida.<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Voc\u00ea quer uma fun\u00e7\u00e3o <code>isPublicado()<\/code> que retorna true\/false baseado no status do registro.<\/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\">4. Manipulando Dados: O Fluxo de Trabalho<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Quando voc\u00ea usa o CakePHP para salvar algo, o processo envolve as duas partes:<\/p>\n\n\n\n<ol start=\"1\" class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>O Controller<\/strong> recebe os dados do formul\u00e1rio.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>O Table Object<\/strong> transforma esses dados brutos em uma <strong>Entity<\/strong> (<code>patchEntity<\/code>).<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Durante essa transforma\u00e7\u00e3o, as <strong>Valida\u00e7\u00f5es<\/strong> do Table Object s\u00e3o executadas.<\/li>\n\n\n\n<li class=\"has-medium-font-size\">Se tudo estiver OK, o <strong>Table Object<\/strong> persiste a <strong>Entity<\/strong> no banco de dados.<\/li>\n<\/ol>\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>\/\/ No Controller\n$artigo = $this-&gt;Artigos-&gt;newEmptyEntity(); \/\/ Cria uma Entity vazia\n$artigo = $this-&gt;Artigos-&gt;patchEntity($artigo, $this-&gt;request-&gt;getData()); \/\/ Transforma dados em Entity\n\nif ($this-&gt;Artigos-&gt;save($artigo)) {\n    \/\/ Aqui o $artigo agora tem o 'id' preenchido pelo banco!\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\">5. Propriedades Virtuais e Acessores: A M\u00e1gica da Entity<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Imagine que no seu blog voc\u00ea tem um campo <code>corpo<\/code> que \u00e9 muito longo. Voc\u00ea quer mostrar um resumo de 100 caracteres na home. Em vez de fazer isso no HTML (View), voc\u00ea cria na <strong>Entity<\/strong>.<\/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>\/\/ src\/Model\/Entity\/Artigo.php\nprotected function _getResumo(): string\n{\n    return mb_substr(strip_tags($this-&gt;corpo), 0, 100) . '...';\n}\n<\/code><\/pre>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">No seu template, basta chamar: <code>&lt;?= $artigo-&gt;resumo ?&gt;<\/code>. Note que voc\u00ea n\u00e3o chama a fun\u00e7\u00e3o, mas sim o nome da propriedade sem o <code>_get<\/code>. O CakePHP faz o mapeamento autom\u00e1tico!<\/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. Valida\u00e7\u00e3o vs Regras de Aplica\u00e7\u00e3o (Application Rules)<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">O CakePHP separa valida\u00e7\u00e3o de integridade de regras de neg\u00f3cio.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-medium-font-size\"><strong>Validator:<\/strong> Verifica o formato (\u00e9 um e-mail? tem 10 caracteres?). Roda antes dos dados virarem uma Entity.<\/li>\n\n\n\n<li class=\"has-medium-font-size\"><strong>BuildRules:<\/strong> Verifica o contexto (este e-mail j\u00e1 existe? este autor_id \u00e9 v\u00e1lido?). Roda na hora do <code>save<\/code>.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Ambas ficam no <strong>Table Object<\/strong>, garantindo que o seu banco de dados nunca receba lixo.<\/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\">Conclus\u00e3o: Organiza\u00e7\u00e3o que Gera Escalabilidade<\/h2>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Manipula\u00e7\u00e3o de dados no CakePHP: A separa\u00e7\u00e3o entre <strong>Table Objects<\/strong> e <strong>Entities<\/strong> \u00e9 o que permite que o seu projeto cres\u00e7a sem se tornar um caos. Ao entender que o Table cuida do &#8220;onde e como&#8221; e a Entity cuida do &#8220;o qu\u00ea&#8221;, voc\u00ea cria um c\u00f3digo limpo, test\u00e1vel e f\u00e1cil de manter.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Para um blog com centenas de artigos, essa estrutura garante que as formata\u00e7\u00f5es de texto e as regras de publica\u00e7\u00e3o estejam centralizadas. Se voc\u00ea precisar mudar a regra de resumo amanh\u00e3, muda em um \u00fanico arquivo (a Entity) e todo o site se atualiza.<\/p>\n\n\n\n<p class=\"has-medium-font-size wp-block-paragraph\">Agora que voc\u00ea domina a manipula\u00e7\u00e3o de dados, \u00e9 hora de aprender a conectar essas pe\u00e7as de forma mais complexa. No pr\u00f3ximo artigo, veremos: <strong>&#8220;Associa\u00e7\u00f5es (HasMany, BelongsTo): Relacionando tabelas como um profissional.&#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\"><strong>Dica de Ouro:<\/strong> Sempre que o Bake gerar seus arquivos, abra a Entity e configure corretamente o array <code>$_accessible<\/code>. Isso previne ataques de <em>Mass Assignment<\/em>, garantindo que usu\u00e1rios mal-intencionados n\u00e3o alterem campos como &#8220;permissao_admin&#8221; atrav\u00e9s de formul\u00e1rios comuns.<\/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>Manipula\u00e7\u00e3o de dados no CakePHP: Se voc\u00ea j\u00e1 usou o comando Bake que vimos no&#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-5864","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>Manipula\u00e7\u00e3o de dados no CakePHP - BLOG THIAGO ROSSI<\/title>\n<meta name=\"description\" content=\"Manipula\u00e7\u00e3o de dados no CakePHP: No CakePHP, a camada de Model n\u00e3o \u00e9 uma classe \u00fanica e gigante. Ela \u00e9 dividida para respeitar o princ\u00edpio ...\" \/>\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\/manipulacao-de-dados-no-cakephp\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Manipula\u00e7\u00e3o de dados no CakePHP - BLOG THIAGO ROSSI\" \/>\n<meta property=\"og:description\" content=\"Manipula\u00e7\u00e3o de dados no CakePHP: No CakePHP, a camada de Model n\u00e3o \u00e9 uma classe \u00fanica e gigante. Ela \u00e9 dividida para respeitar o princ\u00edpio ...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-no-cakephp\/\" \/>\n<meta property=\"og:site_name\" content=\"BLOG THIAGO ROSSI\" \/>\n<meta property=\"article:published_time\" content=\"2026-04-07T19:52:53+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-04-07T19:53:46+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=\"7 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/manipulacao-de-dados-no-cakephp\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/manipulacao-de-dados-no-cakephp\\\/\"},\"author\":{\"name\":\"Thiago Rossi\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#\\\/schema\\\/person\\\/5f28286948ec2afdeb2e044a2196cd87\"},\"headline\":\"Manipula\u00e7\u00e3o de dados no CakePHP\",\"datePublished\":\"2026-04-07T19:52:53+00:00\",\"dateModified\":\"2026-04-07T19:53:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/manipulacao-de-dados-no-cakephp\\\/\"},\"wordCount\":996,\"publisher\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/manipulacao-de-dados-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\\\/manipulacao-de-dados-no-cakephp\\\/\",\"url\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/manipulacao-de-dados-no-cakephp\\\/\",\"name\":\"Manipula\u00e7\u00e3o de dados no CakePHP - BLOG THIAGO ROSSI\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/manipulacao-de-dados-no-cakephp\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/manipulacao-de-dados-no-cakephp\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/04\\\/capa-cakephp.png\",\"datePublished\":\"2026-04-07T19:52:53+00:00\",\"dateModified\":\"2026-04-07T19:53:46+00:00\",\"description\":\"Manipula\u00e7\u00e3o de dados no CakePHP: No CakePHP, a camada de Model n\u00e3o \u00e9 uma classe \u00fanica e gigante. Ela \u00e9 dividida para respeitar o princ\u00edpio ...\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/manipulacao-de-dados-no-cakephp\\\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/manipulacao-de-dados-no-cakephp\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/manipulacao-de-dados-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\\\/manipulacao-de-dados-no-cakephp\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thiagorossi.com.br\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Manipula\u00e7\u00e3o de dados 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":"Manipula\u00e7\u00e3o de dados no CakePHP - BLOG THIAGO ROSSI","description":"Manipula\u00e7\u00e3o de dados no CakePHP: No CakePHP, a camada de Model n\u00e3o \u00e9 uma classe \u00fanica e gigante. Ela \u00e9 dividida para respeitar o princ\u00edpio ...","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\/manipulacao-de-dados-no-cakephp\/","og_locale":"pt_BR","og_type":"article","og_title":"Manipula\u00e7\u00e3o de dados no CakePHP - BLOG THIAGO ROSSI","og_description":"Manipula\u00e7\u00e3o de dados no CakePHP: No CakePHP, a camada de Model n\u00e3o \u00e9 uma classe \u00fanica e gigante. Ela \u00e9 dividida para respeitar o princ\u00edpio ...","og_url":"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-no-cakephp\/","og_site_name":"BLOG THIAGO ROSSI","article_published_time":"2026-04-07T19:52:53+00:00","article_modified_time":"2026-04-07T19:53:46+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":"7 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-no-cakephp\/#article","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-no-cakephp\/"},"author":{"name":"Thiago Rossi","@id":"https:\/\/thiagorossi.com.br\/blog\/#\/schema\/person\/5f28286948ec2afdeb2e044a2196cd87"},"headline":"Manipula\u00e7\u00e3o de dados no CakePHP","datePublished":"2026-04-07T19:52:53+00:00","dateModified":"2026-04-07T19:53:46+00:00","mainEntityOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-no-cakephp\/"},"wordCount":996,"publisher":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#organization"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-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\/manipulacao-de-dados-no-cakephp\/","url":"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-no-cakephp\/","name":"Manipula\u00e7\u00e3o de dados no CakePHP - BLOG THIAGO ROSSI","isPartOf":{"@id":"https:\/\/thiagorossi.com.br\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-no-cakephp\/#primaryimage"},"image":{"@id":"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-no-cakephp\/#primaryimage"},"thumbnailUrl":"https:\/\/thiagorossi.com.br\/blog\/wp-content\/uploads\/2026\/04\/capa-cakephp.png","datePublished":"2026-04-07T19:52:53+00:00","dateModified":"2026-04-07T19:53:46+00:00","description":"Manipula\u00e7\u00e3o de dados no CakePHP: No CakePHP, a camada de Model n\u00e3o \u00e9 uma classe \u00fanica e gigante. Ela \u00e9 dividida para respeitar o princ\u00edpio ...","breadcrumb":{"@id":"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-no-cakephp\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-no-cakephp\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/thiagorossi.com.br\/blog\/manipulacao-de-dados-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\/manipulacao-de-dados-no-cakephp\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thiagorossi.com.br\/blog\/"},{"@type":"ListItem","position":2,"name":"Manipula\u00e7\u00e3o de dados 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\/5864","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=5864"}],"version-history":[{"count":2,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5864\/revisions"}],"predecessor-version":[{"id":5866,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/posts\/5864\/revisions\/5866"}],"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=5864"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/categories?post=5864"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thiagorossi.com.br\/blog\/wp-json\/wp\/v2\/tags?post=5864"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}