<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Laravel on Tiago Costa</title>
    <link>https://tiagoscosta.tpps.com.br/tags/laravel/</link>
    <description>Recent content in Laravel on Tiago Costa</description>
    <generator>Hugo</generator>
    <language>pt-br</language>
    <lastBuildDate>Thu, 23 Apr 2026 18:35:00 +0000</lastBuildDate>
    <atom:link href="https://tiagoscosta.tpps.com.br/tags/laravel/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>📝 Explorando o DDD no Ecossistema Laravel: Da Teoria à Prática</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-explorando-o-ddd-no-ecossistema-laravel-da-teoria-%C3%A0-pr%C3%A1tica/</link>
      <pubDate>Thu, 23 Apr 2026 18:35:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-explorando-o-ddd-no-ecossistema-laravel-da-teoria-%C3%A0-pr%C3%A1tica/</guid>
      <description>&lt;p&gt;O &lt;strong&gt;Domain-Driven Design (DDD)&lt;/strong&gt; não é apenas um padrão de pastas, mas uma filosofia de design de software que coloca a &lt;strong&gt;Regra de Negócio&lt;/strong&gt; (o Domínio) como o centro de todas as decisões. No Laravel, aplicar DDD significa elevar o nível de maturidade do código, garantindo que o framework sirva à aplicação, e não o contrário.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-que-é-ddd-e-por-que-aplicá-lo&#34;&gt;&#xA;  1. O que é DDD e por que aplicá-lo?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-que-%c3%a9-ddd-e-por-que-aplic%c3%a1-lo&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;No desenvolvimento tradicional (MVC puro), é comum encontrarmos lógica de banco de dados em Controllers ou Models gigantes. O DDD propõe o desacoplamento. Ele divide o sistema em camadas para que, se você precisar trocar o banco de dados ou a forma como um comando é disparado, a regra de negócio permaneça intacta.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Sanitização de Dados e Gestão de Memória: Como Criar Processos de Longa Duração Resilientes no Laravel</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-sanitiza%C3%A7%C3%A3o-de-dados-e-gest%C3%A3o-de-mem%C3%B3ria-como-criar-processos-de-longa-dura%C3%A7%C3%A3o-resilientes-no-laravel/</link>
      <pubDate>Sat, 07 Feb 2026 00:53:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-sanitiza%C3%A7%C3%A3o-de-dados-e-gest%C3%A3o-de-mem%C3%B3ria-como-criar-processos-de-longa-dura%C3%A7%C3%A3o-resilientes-no-laravel/</guid>
      <description>&lt;p&gt;Ao desenvolver Workers ou comandos que rodam em loop infinito (como consumidores de Kafka ou RabbitMQ), o desenvolvedor enfrenta dois grandes inimigos: &lt;strong&gt;a inconsistência de dados (registros fantasma)&lt;/strong&gt; e o &lt;strong&gt;estouro de memória&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;​Neste artigo, veremos como limpar o banco de dados e manter a saúde do servidor PHP ao mesmo tempo.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-o-problema-registros-inconsistentes-e-memória-infinita&#34;&gt;&#xA;  ​1. O Problema: Registros Inconsistentes e Memória Infinita&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-problema-registros-inconsistentes-e-mem%c3%b3ria-infinita&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;​Em sistemas legados, é comum encontrar registros com colunas nulas que impedem a lógica de updateOrCreate. Além disso, se o seu script roda 24/7, cada consulta ao banco pode acumular logs internos, e cada objeto criado consome memória que o PHP, por padrão, demora a liberar.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Testando o Intestável: Como Validar Métodos Privados e Lógica de Banco no Laravel</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-testando-o-intest%C3%A1vel-como-validar-m%C3%A9todos-privados-e-l%C3%B3gica-de-banco-no-laravel/</link>
      <pubDate>Sat, 07 Feb 2026 00:20:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-testando-o-intest%C3%A1vel-como-validar-m%C3%A9todos-privados-e-l%C3%B3gica-de-banco-no-laravel/</guid>
      <description>&lt;p&gt;Muitas vezes, nos deparamos com classes de serviço ou comandos que possuem métodos privados complexos, responsáveis por transformações de dados e persistência. O dilema surge: devemos tornar o método público apenas para testar? Ou devemos testar apenas o método principal e esperar que tudo funcione?&lt;/p&gt;&#xA;&lt;p&gt;​Neste artigo, vamos explorar como testar métodos privados e garantir a integridade do banco de dados sem comprometer o encapsulamento da sua classe.&lt;/p&gt;&#xA;&lt;h2 id=&#34;o-cenário&#34;&gt;&#xA;  ​O Cenário&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-cen%c3%a1rio&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;​Imagine um sistema de logística que processa atualizações de rastreio vindas de uma fila. Temos um método privado saveDeliveryStatus que decide, com base em strings brutas, qual o status real da entrega.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Guia Definitivo: Laravel &#43; Docker &#43; Xdebug no WSL2</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-guia-definitivo-laravel-docker-xdebug-no-wsl2/</link>
      <pubDate>Wed, 28 Jan 2026 13:01:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-guia-definitivo-laravel-docker-xdebug-no-wsl2/</guid>
      <description>&lt;p&gt;Este artigo detalha como configurar um ambiente de desenvolvimento onde o código reside no sistema de arquivos do Linux (WSL), rodando em containers Docker, com debug funcional no VS Code.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-por-que-rodar-no-diretório-do-wsl&#34;&gt;&#xA;  1. Por que rodar no diretório do WSL?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-por-que-rodar-no-diret%c3%b3rio-do-wsl&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Para performance máxima. O Docker Desktop no Windows tem um gargalo de IO quando acessa arquivos no &lt;code&gt;/mnt/c/&lt;/code&gt;. Ao mover o projeto para &lt;code&gt;\\wsl.localhost\Ubuntu\home\...&lt;/code&gt;, a aplicação Laravel pode rodar até 10x mais rápido.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Data Engineering com Laravel: Integrando DuckDB e MySQL via Docker</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-data-engineering-com-laravel-integrando-duckdb-e-mysql-via-docker/</link>
      <pubDate>Tue, 13 Jan 2026 15:49:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-data-engineering-com-laravel-integrando-duckdb-e-mysql-via-docker/</guid>
      <description>&lt;p&gt;O DuckDB é conhecido como o &amp;ldquo;SQLite para Analytics&amp;rdquo;. Quando integrado ao ecossistema Laravel dentro de containers, ele permite realizar consultas pesadas e exportações massivas sem degradar a performance do seu banco de dados principal.&lt;/p&gt;&#xA;&lt;h2 id=&#34;1-arquitetura-da-solução&#34;&gt;&#xA;  1. Arquitetura da Solução&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-arquitetura-da-solu%c3%a7%c3%a3o&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;A estratégia consiste em rodar o DuckDB via CLI dentro do container PHP, comunicando-se com o container MySQL através da rede interna do Docker.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Arquitetura de Dados Moderna no Laravel: Transformando seu Backend em um motor de ETL com DuckDB</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-arquitetura-de-dados-moderna-no-laravel-transformando-seu-backend-em-um-motor-de-etl-com-duckdb/</link>
      <pubDate>Thu, 08 Jan 2026 18:06:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-arquitetura-de-dados-moderna-no-laravel-transformando-seu-backend-em-um-motor-de-etl-com-duckdb/</guid>
      <description>&lt;p&gt;À medida que as aplicações Laravel crescem, o banco de dados transacional (OLTP) começa a sofrer. Queries complexas de SLA e volumetria, que envolvem centenas de colunas e cálculos de aging, degradam a performance do sistema. A solução não é apenas &amp;ldquo;otimizar a query&amp;rdquo;, mas sim mudar o motor de execução para um banco analítico (OLAP).&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, exploraremos como implementar o &lt;strong&gt;DuckDB&lt;/strong&gt; dentro do Laravel para orquestrar processos de ETL (Extração, Transformação e Carga) de alta performance.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Turboalimentando Relatórios no Laravel: Integrando DuckDB e MySQL para ETL de Alta Performance</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-turboalimentando-relat%C3%B3rios-no-laravel-integrando-duckdb-e-mysql-para-etl-de-alta-performance/</link>
      <pubDate>Thu, 08 Jan 2026 17:49:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-turboalimentando-relat%C3%B3rios-no-laravel-integrando-duckdb-e-mysql-para-etl-de-alta-performance/</guid>
      <description>&lt;h2 id=&#34;introdução&#34;&gt;&#xA;  Introdução&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#introdu%c3%a7%c3%a3o&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Muitas aplicações Laravel sofrem com o mesmo gargalo: à medida que o banco de dados transacional (MySQL) cresce, a geração de relatórios complexos torna-se lenta e consome recursos preciosos, muitas vezes travando tabelas vitais para a operação. Para resolver isso, surge uma combinação poderosa: &lt;strong&gt;Laravel como orquestrador e DuckDB como motor analítico&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h2 id=&#34;o-que-é-o-duckdb&#34;&gt;&#xA;  O que é o DuckDB?&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#o-que-%c3%a9-o-duckdb&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;O DuckDB é um banco de dados SQL analítico (OLAP) em processo. Diferente do MySQL, que é orientado a linhas (ideal para transações), o DuckDB é &lt;code&gt;orientado a colunas&lt;/code&gt; e utiliza execução vetorial. Isso o torna incrivelmente rápido para processar agregações (&lt;code&gt;SUM&lt;/code&gt;, &lt;code&gt;COUNT&lt;/code&gt;, &lt;code&gt;GROUP BY&lt;/code&gt;) em milhões de registros.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Desenvolvimento Ultra-Rápido com Docker, WSL2, Laravel e Vue.js</title>
      <link>https://tiagoscosta.tpps.com.br/posts/desenvolvimento-ultra-r%C3%A1pido-com-docker-wsl2-laravel-e-vue-js/</link>
      <pubDate>Mon, 05 Jan 2026 13:47:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/desenvolvimento-ultra-r%C3%A1pido-com-docker-wsl2-laravel-e-vue-js/</guid>
      <description>&lt;p&gt;Se você desenvolve usando Docker no Windows, provavelmente já sentiu aquela lentidão frustrante onde um simples &lt;code&gt;refresh&lt;/code&gt; no Laravel demora segundos ou o Hot Reload do Vue.js parece não funcionar. A solução para isso não é trocar de computador, mas sim mudar &lt;strong&gt;onde&lt;/strong&gt; seus arquivos residem e &lt;strong&gt;como&lt;/strong&gt; suas ferramentas interagem com eles.&lt;/p&gt;&#xA;&lt;p&gt;Neste artigo, vamos detalhar como configurar o ambiente perfeito de alta performance.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-o-segredo-da-performance-o-sistema-de-arquivos&#34;&gt;&#xA;  1. O Segredo da Performance: O Sistema de Arquivos&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-o-segredo-da-performance-o-sistema-de-arquivos&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;A mudança mais impactante que você pode fazer é mover seus projetos da partição do Windows (&lt;code&gt;C:\Users\...&lt;/code&gt;) para o sistema de arquivos nativo do Linux dentro do WSL2 (&lt;code&gt;\\wsl.localhost\Ubuntu\home\...&lt;/code&gt;).&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Containers Docker &#43; Supervisor para Workers Laravel (RHEL/CentOS)</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-containers-docker-supervisor-para-workers-laravel-rhel-centos/</link>
      <pubDate>Fri, 05 Dec 2025 17:27:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-containers-docker-supervisor-para-workers-laravel-rhel-centos/</guid>
      <description>&lt;p&gt;Ao rodar aplicações Laravel em &lt;strong&gt;containers Docker&lt;/strong&gt;, o gerenciamento de processos em segundo plano, como filas e cron jobs, exige uma ferramenta robusta. O &lt;strong&gt;Supervisor&lt;/strong&gt; é a solução ideal, mas sua configuração no ambiente Docker requer atenção especial às permissões e caminhos.&lt;/p&gt;&#xA;&lt;p&gt;Este artigo apresenta um modelo de &lt;strong&gt;Dockerfile&lt;/strong&gt; e arquivos de configuração para instalar e configurar o Supervisor em uma imagem base &lt;strong&gt;RHEL/CentOS/Rocky Linux&lt;/strong&gt;, garantindo que seus &lt;em&gt;workers&lt;/em&gt; do Laravel sejam gerenciados corretamente.&lt;/p&gt;</description>
    </item>
    <item>
      <title>📝 Artisan: Reiniciando Workers do Supervisor no Laravel via docker</title>
      <link>https://tiagoscosta.tpps.com.br/posts/-artisan-reiniciando-workers-do-supervisor-no-laravel/</link>
      <pubDate>Fri, 05 Dec 2025 16:51:00 +0000</pubDate>
      <guid>https://tiagoscosta.tpps.com.br/posts/-artisan-reiniciando-workers-do-supervisor-no-laravel/</guid>
      <description>&lt;p&gt;Este guia detalha a criação de um comando personalizado no Laravel, que permite reiniciar workers específicos do Supervisor de forma rápida e segura, mesmo quando a aplicação roda em um container Docker. Incluímos também dicas essenciais para diagnóstico de permissões.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;1-passo-1-criação-do-comando-artisan&#34;&gt;&#xA;  1️⃣ Passo 1: Criação do Comando Artisan&#xA;  &lt;a class=&#34;heading-link&#34; href=&#34;#1-passo-1-cria%c3%a7%c3%a3o-do-comando-artisan&#34;&gt;&#xA;    &lt;i class=&#34;fa-solid fa-link&#34; aria-hidden=&#34;true&#34; title=&#34;Link para o cabeçalho&#34;&gt;&lt;/i&gt;&#xA;    &lt;span class=&#34;sr-only&#34;&gt;Link para o cabeçalho&lt;/span&gt;&#xA;  &lt;/a&gt;&#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Vamos criar um comando que servirá como um wrapper para o utilitário de sistema &lt;code&gt;supervisorctl&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
