🎯 Piensa en esto: Imagina que tienes un archivero con 100 carpetas numeradas del 1 al 100. Cada vez que alguien te pide «la carpeta 47», tú piensas: «¿Y qué hay en esa carpeta? ¿Facturas? ¿Contratos? ¿Reportes?». No sabes de qué se trata hasta que la abres.
Lo mismo pasa con los productos en tu base de datos. Si Filament muestra «Producto #47», nadie sabe qué producto es. Pero si le dices «usa el campo nombre«, de repente ves «Laptop Dell» y todo tiene sentido. Eso es exactamente lo que hace $recordTitleAttribute.
El problema que resolvemosFíjate bien: cuando Filament necesita mostrar un producto (en una búsqueda, en un título, en una notificación), ¿qué texto debe usar? Si no le dices nada, intenta adivinar. Busca un campo llamado
name. Pero si tu campo se llama nombre (en español), no lo encuentra y termina mostrando «Producto #1», «Producto #2″…
💡 Aquí está el truco: una sola línea de código le dice a Filament exactamente qué campo usar.
¿Dónde aparece este título?Este nombre aparece en muchos lugares que quizás no habías notado: cuando buscas en la barra superior del panel, en el título de la página cuando editas algo, en las notificaciones que dicen «X fue actualizado», cuando este producto aparece relacionado con otra cosa…
La solución: una línea mágicaVamos a decirle a Filament: «Oye, cuando necesites mostrar un producto, usa el campo
nombre de mi tabla». Es como ponerle una etiqueta descriptiva a cada carpeta del archivero.📝 ESTE ES EL CÓDIGO QUE VAMOS A APRENDER:
📍 Archivo: app/Filament/Resources/Productos/ProductoResource.php
protected static ?string $recordTitleAttribute = 'nombre';
🔍 Vamos a entender línea por línea:
protected → Solo esta clase puede usar esta propiedad. Es como tu contraseña: solo tú la conoces.static → Existe una sola vez para toda la clase. No se crea una copia nueva por cada producto.?string → Es un texto (string), y el signo de interrogación significa que puede estar vacío si quieres.$recordTitleAttribute → Este es el nombre EXACTO que Filament busca. No lo inventes, tiene que ser así.'nombre' → El nombre de la columna en tu base de datos. Si tu columna se llama diferente (title, name, descripcion), usa ese nombre.📊 Tu tabla de productos se ve así:
| id | nombre | precio | stock |
|---|---|---|---|
| 1 | Laptop Dell Inspiron | 999.99 | 15 |
| 2 | Mouse Logitech MX | 79.99 | 50 |
👆 Con $recordTitleAttribute = 'nombre', Filament muestra «Laptop Dell Inspiron», no «Producto #1»
¿Dónde exactamente cambia esto?Mira, esto es lo bonito: con una sola línea, mejoras TODO el panel:
- 🔍 Búsqueda global: Cuando escribes en la barra superior, busca en el campo
nombre - 📝 Título al editar: Dice «Editar: Laptop Dell Inspiron» en lugar de «Editar Producto #1»
- 👁️ Título al ver: «Ver: Laptop Dell Inspiron»
- 🔗 En relaciones: Si un Cliente tiene Productos, aparece el nombre, no el número
- ✅ Notificaciones: «Laptop Dell Inspiron fue actualizado exitosamente»
📁 ¿Quieres ver el código completo del archivo? (opcional)
Esto es solo para que veas dónde va tu código:
📍 Archivo: app/Filament/Resources/Productos/ProductoResource.php
<?php
namespace App\Filament\Resources\Productos;
use App\Models\Producto;
use Filament\Resources\Resource;
class ProductoResource extends Resource
{
protected static ?string $model = Producto::class;
// 👇 ESTA ES LA LÍNEA QUE AGREGAMOS
protected static ?string $recordTitleAttribute = 'nombre';
// ... resto del código
}
¡Prueba el cambio!Guarda los cambios y recarga tu panel. Crea un producto llamado «Teclado Mecánico RGB». Luego busca «Teclado» en la barra de búsqueda superior. ¿Aparece? ¡Eso significa que todo funciona!
💡 También fíjate en el título cuando entres a editar el producto. Debería decir el nombre, no un número.
🎉 ¿Qué aprendimos hoy?
$recordTitleAttributele dice a Filament qué campo usar como «nombre» de cada registro- Sin él ves «Producto #47», con él ves «Laptop Dell Inspiron»
- El nombre debe coincidir EXACTAMENTE con tu columna en la base de datos
- Una sola línea mejora búsquedas, títulos, notificaciones y relaciones
- Tu panel se siente más profesional y amigable
En la siguiente lección vamos a ver el método form(), que es donde defines cómo se ve el formulario para crear y editar productos. ¡Es como ser arquitecto de tu propio formulario! Nos vemos allí. 🚀