Cómo hacer que algo pase cuando se guarda un campo
saved() es como esa campanita: algo que sucede DESPUÉS de que el campo se guarda.
¿Para qué sirve saved()?
Es un gancho (hook) que te permite ejecutar código justo después de que el valor del campo se guardó en la base de datos.
💡 Es perfecto para enviar notificaciones, registrar logs, o actualizar otros datos relacionados.
El caso de uso más común
Cuando cambias el estado de un pedido a «enviado», quieres enviar un email al cliente automáticamente. ¡Para eso sirve saved()!
📍 Archivo: app/Filament/Resources/PedidoResource.php
📝 ESTE ES EL CÓDIGO QUE VAMOS A APRENDER:
📍 Archivo: app/Filament/Resources/PedidoResource.php
Select::make('estado')
->options([
'pendiente' => 'Pendiente',
'enviado' => 'Enviado',
'entregado' => 'Entregado',
])
->saved(function ($record) {
if ($record->estado === 'enviado') {
// Enviar email al cliente
$record->cliente->notify(new PedidoEnviado());
}
})
🔍 Vamos a entender línea por línea (como si fuera la primera vez):
Select::make('estado')→ Creamos un campo select para el estado del pedido. Es como un menú desplegable con opciones.
->options([...])→ Definimos las opciones disponibles: pendiente, enviado, entregado. Es como escribir las opciones de un formulario en papel.
->saved(function ($record) {→ Aquí viene la magia.
saved() es el «después de guardar». La función recibe $record que es el registro que se acaba de guardar.
if ($record->estado === 'enviado') {→ Preguntamos: ¿El estado cambió a «enviado»? Si sí, entramos al bloque.
$record->cliente->notify(new PedidoEnviado());→ Enviamos una notificación al cliente.
$record->cliente accede a la relación del pedido con su cliente.
📊 Así funciona el flujo:
| Paso | Qué pasa | Código involucrado |
|---|---|---|
| 1 | Usuario cambia estado a «enviado» | El select |
| 2 | Se guarda en la base de datos | Laravel lo hace automático |
| 3 | Se ejecuta saved() | Nuestra función |
| 4 | Se envía el email | notify() |
👆 El saved() se ejecuta SIEMPRE después del guardado, no antes.
📁 ¿Quieres ver el código completo del archivo? (opcional)
Esto es solo para que veas dónde va tu código. No necesitas memorizar todo esto:
// app/Filament/Resources/PedidoResource.php
public static function form(Form $form): Form
{
return $form
->schema([
// ... otros campos ...
Select::make('estado')
->options([
'pendiente' => 'Pendiente',
'enviado' => 'Enviado',
'entregado' => 'Entregado',
])
->saved(function ($record) {
if ($record->estado === 'enviado') {
$record->cliente->notify(new PedidoEnviado());
}
}),
]);
}
🎉 ¿Qué aprendimos hoy?
saved()ejecuta código DESPUÉS de guardar el campo- Recibe el registro guardado como parámetro
$record - Es perfecto para notificaciones, logs o acciones en cascada
- Se ejecuta cada vez que se guarda ese campo específico
¡Ya sabes cómo hacer que tu formulario «reaccione» cuando algo se guarda! Nos vemos en la siguiente lección.