8-POST de Película (Creación de registros)
Introducción
En esta clase vamos a profundizar en cómo guardar registros en la base de datos usando Laravel. Si la clase anterior te pareció "muy light", aquí veremos procesos más interesantes de creación de datos.
1. Configuración de la Ruta POST
Archivo: routes/api.php
// Ruta existente GET (para obtener todas las películas)
Route::get('/movies', [MovieController::class, 'index']);
// Nueva ruta POST (para crear nuevas películas)
Route::post('/movies', [MovieController::class, 'store']);Explicación:
Usamos
Route::posten lugar deRoute::getEl verbo POST en HTTP indica que vamos a crear algo nuevo
No necesitamos parámetros (como un ID) porque creamos desde cero
El método del controlador se llamará
store
2. Creación del Método Store en el Controlador
Archivo: app/Http/Controllers/MovieController.php
public function store(Request $request)
{
// Crear una nueva película con todos los datos recibidos
$movie = Movie::create($request->all());
// Retornar respuesta JSON con el objeto creado
return response()->json([
'data' => $movie,
'message' => 'Película creada exitosamente'
], 201); // Código HTTP 201: Created
}¿Qué hace este código?
$request->all(): Obtiene TODOS los datos enviados en la solicitud POSTMovie::create(): Método de Eloquent que crea y guarda el registroCódigo 201: Indica que se creó un recurso exitosamente
3. Estructura del Modelo Movie
Archivo: app/Models/Movie.php
class Movie extends Model
{
use HasFactory;
// Campos que se pueden llenar masivamente
protected $fillable = [
'title',
'synopsis',
'year',
'cover'
];
}Importante: Los campos en $fillable son los únicos que se pueden asignar masivamente con create().
4. Probando con Postman
Configuración de la solicitud:
Método: POST
URL:
http://tu-dominio.com/api/moviesHeaders:
Content-Type: application/json
Body (raw JSON):
{
"title": "El Laberinto del Fauno",
"synopsis": "En 1944, en la España post-guerra civil, Ofelia y su madre se mudan con el brutal capitán Vidal. Ofelia descubre un laberinto donde conoce al fauno, quien le revela que ella es la princesa perdida del reino subterráneo.",
"year": 2006,
"cover": "https://ejemplo.com/cover-laberinto.jpg"
}Respuesta esperada:
{
"data": {
"id": 11,
"title": "El Laberinto del Fauno",
"synopsis": "...",
"year": 2006,
"cover": "...",
"created_at": "2024-01-15T10:30:00.000000Z",
"updated_at": "2024-01-15T10:30:00.000000Z"
},
"message": "Película creada exitosamente"
}5. Validación de Datos (Buenas Prácticas)
Versión mejorada del método store:
public function store(Request $request)
{
// Validar los datos recibidos
$validated = $request->validate([
'title' => 'required|string|max:255',
'synopsis' => 'required|string',
'year' => 'required|integer|min:1900|max:' . date('Y'),
'cover' => 'nullable|url|max:500'
]);
// Crear la película con datos validados
$movie = Movie::create($validated);
return response()->json([
'data' => $movie,
'message' => 'Película creada exitosamente'
], 201);
}6. Diferencia entre GET y POST
| Método | Propósito | Visible en URL | Idempotente |
|---|---|---|---|
| GET | Obtener datos | Sí (parámetros en URL) | Sí |
| POST | Crear datos | No (datos en body) | No |
Ejemplo en navegador:
GET /movies→ Muestra todas las películasPOST /movies→ Crea una nueva película (no se puede ejecutar desde la barra de direcciones)
7. Solución de Problemas Comunes
Problema 1: Error "MassAssignmentException"
Solución: Asegúrate de tener los campos en $fillable del modelo.
Problema 2: Error 404 al hacer POST
Solución: Verifica que la ruta esté registrada correctamente en api.php.
Problema 3: Datos no se guardan
Solución:
// Verifica qué datos llegan
dd($request->all());
// O usa logging
Log::info('Datos recibidos:', $request->all());8. Ejercicio Práctico
Crea una nueva colección en Postman llamada "Laravel Movies API"
Agrega un request POST a
/moviesPrueba crear 3 películas diferentes
Verifica que aparezcan en la ruta GET
/moviesIntenta enviar datos inválidos y observa los errores
9. Resumen
✅ Aprendimos a crear rutas POST en Laravel
✅ Implementamos el método
storeen el controlador✅ Usamos
Movie::create()para guardar registros✅ Probamos la API con Postman
✅ Entendimos la diferencia entre GET y POST
✅ Añadimos validación básica de datos
Próxima Clase
En el siguiente tutorial aprenderemos a actualizar registros existentes usando el método PUT/PATCH. ¡Nos vemos en el próximo vídeo!
Consejo final: Siempre valida los datos del usuario antes de guardarlos en la base de datos. ¡La seguridad es importante
Comentarios
Publicar un comentario