15. Cómo hacer la columna de email buscable en Filament 5 – Búsqueda por correo electrónico
Hoy vas a duplicar el poder de búsqueda de tu tabla. Imagina que un cliente te llama diciendo «soy juan@empresa.com» pero no recuerdas su nombre. Con la búsqueda en email, podrás encontrarlo al instante. Tu tabla ahora buscará en nombre Y email simultáneamente.
🎯 Objetivo de hoy
Hacer la columna de email buscable usando ->searchable() en CustomersTable.php.
🖥️ Antes / Después
Antes: La barra de búsqueda solo busca en nombres. Si escribes «juan@empresa.com», no encuentra nada aunque exista un cliente con ese email.
Después: La búsqueda funciona en ambas columnas. Escribe «juan» y encuentra tanto «Juan Pérez» como «maria@juanenterprises.com». Escribe «@gmail» y encuentra todos los clientes con correo Gmail.
📁 Estructura de carpetas (mapa de hoy)
app/Filament/Resources/
└── Customers/ ⚪ Carpeta del Resource
├── CustomerResource.php ⚪ No lo tocamos hoy
├── Pages/ ⚪ No lo tocamos hoy
| ├── CreateCustomer.php ⚪ No lo tocamos hoy
| ├── EditCustomer.php ⚪ No lo tocamos hoy
| └── ListCustomers.php ⚪ No lo tocamos hoy
├── Schemas/
| └── CustomerForm.php ⚪ No lo tocamos hoy
└── Tables/
└── CustomersTable.php 🟡 🎯 AQUÍ TRABAJAMOS HOY
Hoy modificamos solo el archivo marcado con 🟡. Los demás archivos existen pero no los tocaremos.
📋 Paso 1: Tu código de ayer
📄 Ruta: app/Filament/Resources/Customers/Tables/CustomersTable.php
<?php
namespace App\Filament\Resources\Customers\Tables;
use Filament\Tables\Table;
use Filament\Tables\Columns\TextColumn;
class CustomersTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
TextColumn::make('name')
->searchable()
->sortable(),
TextColumn::make('email'),
]);
}
}
➕ Paso 2: Tu ladrillo de hoy (1 línea)
📄 Ruta: app/Filament/Resources/Customers/Tables/CustomersTable.php
// 🔧 Implementamos: Búsqueda en la columna email
// Agregamos ->searchable() para buscar también por correo
TextColumn::make('email')
->searchable(),
El método ->searchable() en la segunda columna hace que Filament busque en ambos campos simultáneamente. La consulta SQL usa OR para buscar coincidencias en name O email.
✅ Paso 3: Código completo con tu ladrillo
📄 Archivo modificado
Ruta completa: app/Filament/Resources/Customers/Tables/CustomersTable.php
<?php
namespace App\Filament\Resources\Customers\Tables;
use Filament\Tables\Table;
use Filament\Tables\Columns\TextColumn;
class CustomersTable
{
public static function configure(Table $table): Table
{
return $table
->columns([
TextColumn::make('name')
->searchable()
->sortable(),
TextColumn::make('email')
->searchable(),
]);
}
}
🎉 Verifica tu magia
Abre tu navegador en /admin/customers y prueba estos escenarios:
- Escribe un nombre existente → Lo encuentra (como antes)
- Escribe un email completo → Lo encuentra (¡nuevo!)
- Escribe «@gmail.com» → Muestra todos los clientes con Gmail
- Escribe «maria» → Encuentra «María García» Y «pedro@mariaenterprises.com»
- La búsqueda es insensible a mayúsculas: «JUAN», «juan» y «Juan» funcionan igual
¿No busca por email? Revisa que hayas agregado ->searchable() exactamente en la columna de email. Asegúrate de tener clientes con emails guardados en la base de datos.
💬 ¿Probaste buscar por «@gmail»? Tu tabla ahora es inteligente: busca donde sea que aparezca el texto, ya sea en nombre o email. Es como tener un buscador Google miniatura para tus clientes.
Mañana agregaremos la columna de teléfono y le daremos un toque especial. ¿Te animas a seguir construyendo?
📖 Fuente: Filament Searching Multiple Columns
➡️ Próximo paso: Agregar columna de teléfono con TextColumn::make('phone').
