Contenido del curso
Configuración base
- 3

Configuración inicial de un foro en Laravel
04:59 min - 4

Personalizar componentes Blade con Tailwind CSS
10:26 min - 5

Primer componente Livewire en Laravel
11:10 min - 6

Categorías dinámicas con Laravel y Blade
06:18 min - 7

Migración y factory para preguntas en Laravel
05:37 min - 8

Cómo listar preguntas con Tailwind y Laravel
07:57 min - 9

Respuestas anidadas y migrate fresh en Laravel
06:26 min
Preguntas
Pregunta
Respuesta
Flujo de trabajo tradicional
Conclusiones
Formulario de respuestas con LiveWire
Resumen
Crear un formulario funcional con LiveWire para registrar respuestas a una pregunta requiere combinar la vista Blade, una propiedad reactiva y un método que valide, persista y refresque los datos. Aquí verás cómo construir ese flujo paso a paso, con detalles sobre defer, fillable y relaciones Eloquent que cualquier desarrollador Laravel necesita dominar.
¿Cómo se construye el formulario de respuesta en LiveWire?
La parte visual arranca en el componente Blade, dentro de la zona reservada para el formulario. El objetivo es que al presionar Enter se dispare un método sin recargar la página, comportamiento típico de una single page application.
El formulario usa el evento wire:submit.prevent apuntando al método enviarRespuesta, y el input se enlaza a una propiedad llamada body mediante wire:model. El placeholder queda como Escribe una respuesta [01:15].
¿Qué hace
deferen wire:model? Aplaza la sincronización del valor con el servidor hasta que se ejecute una acción, evitando que el renderizado se bloquee mientras LiveWire descarga información en cada tecleo.
Este detalle es clave cuando el componente refresca consultas con frecuencia: sin defer exigirías más al sistema en operaciones que solo consultan datos.
¿Cómo configurar el método enviarRespuesta paso a paso?
En la clase PHP del componente declaras la propiedad pública $body y luego defines el método cuyo nombre debe coincidir exactamente con el referenciado en la vista. El método cumple tres tareas en orden: validar, crear y refrescar.
- Validar que
bodysea obligatorio usando$this->validate()con la regla'body' => 'required'. - Crear la respuesta a través de la relación del usuario autenticado con
auth()->user()->respuestas()->create([...]). - Refrescar el estado asignando
$this->body = ''para devolver el input a vacío [03:40].
Dentro del create pasas dos campos: el question_id que viene de la pregunta cargada en el componente y el body con el contenido escrito por el usuario.
¿Por qué aparece el error de relación no definida?
Al ejecutar el formulario por primera vez, LiveWire lanza un error indicando que el método respuestas no existe en el modelo User. Es lógico: nunca registraste esa relación.
La solución es replicar el patrón ya usado en el modelo Pregunta. Una pregunta tiene muchas respuestas, y un usuario también. Copias el método hasMany y lo pegas en la entidad User apuntando al modelo Respuesta [05:20].
¿Qué relación Eloquent uso entre User y Respuesta? Una relación
hasMany, porque un usuario puede generar múltiples respuestas pero cada respuesta pertenece a un único usuario.
¿Cómo resolver el error de asignación masiva en Laravel?
Después de corregir la relación aparece otro error: una MassAssignmentException. Laravel protege por defecto los modelos contra asignaciones masivas no autorizadas, así que necesitas declarar qué columnas pueden llenarse desde un array.
En el modelo Respuesta agregas la propiedad protected $fillable = ['question_id', 'body'];. Esto funciona como capa de seguridad que garantiza que solo esos dos campos se persistan a través de create o fill.
Un detalle pequeño pero crítico: si olvidas anteponer $this-> al llamar la propiedad dentro del método, recibirás un error distinto que despista. Revisa siempre el contexto del objeto.
¿Cómo verificar que la respuesta se guardó correctamente?
Una vez resueltos los dos errores, el formulario funciona. Escribes el texto, presionas Enter y el input se limpia automáticamente gracias al reset de la propiedad.
Para comprobar la persistencia abres la base de datos, vas a la tabla respuestas y la ordenas de forma descendente por ID. Verás el registro recién creado con su question_id y su user_id correspondientes [07:50].
Al probar con la pregunta número tres, las nuevas filas aparecen vinculadas al usuario uno y a esa pregunta, confirmando que la relación entre tablas opera bien.
¿Qué habilidades técnicas estás aplicando aquí?
Este flujo concentra varios conceptos que se repiten en cualquier proyecto Laravel + LiveWire:
- Binding reactivo con
wire:model.defer: enlazas la propiedad sin saturar el servidor con peticiones por cada tecla. - Validación inline con
$this->validate(): defines reglas dentro del método sin necesidad de un Form Request separado. - Relaciones Eloquent
hasMany: declaras vínculos uno a muchos en los modelos User y Pregunta para acceder a sus respuestas. - Protección con
$fillable: defines qué columnas aceptan asignación masiva, blindando el modelo Respuesta. - Reset de estado tras crear: vacías la propiedad
bodypara dejar el formulario listo para una nueva entrada.
Con estas piezas en su lugar, tu componente ya puede registrar respuestas reales asociadas al usuario autenticado y a la pregunta activa. ¿Te animas a extenderlo agregando un contador de respuestas o validaciones más estrictas? Compártelo en los comentarios.