TubeSum ← Transcribe a video

Crea una REST API CRUD en Laravel desde Cero

Transcribed Jun 16, 2026 Watch on YouTube ↗
Beginner 6 min read For: Beginner PHP developers who want to learn how to build a REST API using Laravel.
102.4K
Views
3.3K
Likes
187
Comments
10
Dislikes
3.4%
📈 Moderate

AI Summary

This tutorial provides a hands-on, step-by-step guide to building a RESTful API with CRUD operations in PHP using the Laravel framework. Starting from a fresh Laravel project, it covers creating a student resource with full endpoints, database migrations, model creation, validation, and deployment options.

[[0:05]]
Video overview and goal

The tutorial aims to create a REST API from scratch using Laravel. The API will manage students with CRUD operations (POST, GET, PUT, PATCH, DELETE) and be tested via Thunder Client in VS Code.

[[1:38]]
Creating a new Laravel project

Uses Composer to create a Laravel project: `composer create-project laravel/laravel laravel-crud-api`. Moves the project to VS Code, then starts the development server with `php artisan serve`.

[[2:57]]
Installing API routes

Runs `php artisan install:api` to generate dedicated API routes (`routes/api.php`) and configure bootstrap for the API. This adds an `api.php` file alongside `web.php`.

[[3:40]]
Defining basic API routes

Demonstrates defining a GET route to `/students` that returns a text string. Then shows how to add routes for POST, PUT (with `{id}`), DELETE, and GET a single student, all returning placeholder texts.

[[6:12]]
Introduction to Thunder Client

Recommends Thunder Client (VS Code extension) for testing API endpoints. Tests the basic routes: GET list, GET single, POST, PUT, DELETE – all return placeholder texts.

[[7:12]]
Creating a database migration

Runs `php artisan make:migration create_students_table` then edits the migration to add columns: `name`, `email`, `phone`, `language`. Runs `php artisan migrate` to create the table.

[[9:58]]
Creating the Student model

Uses `php artisan make:model Student` and customises it with `$table = 'students'` and `$fillable` array containing `name`, `email`, `phone`, `language`.

[[11:08]]
Creating the StudentController

Runs `php artisan make:controller Api/StudentController` to create a controller inside an Api subdirectory. Defines methods: `index`, `store`, `show`, `update`, `destroy`, and `updatePartial`.

[[12:01]]
Connecting routes to controller methods

Updates `routes/api.php` to point each route to the appropriate controller method (e.g., `Route::get('/students', [StudentController::class, 'index'])`).

[[13:00]]
Implementing the index method

In `index()`: fetch all students via `Student::all()`, check if empty (return 'No students found'), else return JSON with status 200.

[[15:03]]
Implementing the store method with validation

In `store()`: validate request data (name, email, phone, language required; email must be valid). Uses `Validator::make()`. If validation fails, return errors; else create the student and return with status 201.

[[19:15]]
Advanced validation rules

Adds more constraints: name max 255 chars, email unique, phone digits with size 10, language must be 'english', 'spanish', or 'french'.

[[20:18]]
Implementing show method

In `show($id)`: find student by ID, if not found return 404; else return student with status 200.

[[21:40]]
Implementing destroy method

In `destroy($id)`: find student, if not found return 404; else delete and return 'Student deleted' with status 200.

[[22:59]]
Implementing update method (PUT)

In `update(Request $request, $id)`: find student, validate all fields as required, then update each attribute from request and save. Returns updated student with status 200.

[[25:27]]
Implementing updatePartial method (PATCH)

In `updatePartial(Request $request, $id)`: validate without required fields, then conditionally update only present attributes (`if ($request->has('name'))`). Save and return updated student.

[[28:39]]
Switching to MySQL database

Creates a MySQL database (laravel_api_db) via phpMyAdmin, edits `.env` to change DB_CONNECTION to mysql, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD, then runs migrations again.

[[30:26]]
Deployment and additional resources

Mentions a bonus video for channel members on deploying to Railway. Recommends other deployment tutorials and invites to join community (Discord, Twitter, Instagram, TikTok, website).

By following this tutorial, you can build a fully functional CRUD REST API with Laravel, including database integration, validation, and multiple database backends. The final API is testable via Thunder Client and can be easily extended for more complex use cases.

Clickbait Check

85% Legit

"The title accurately reflects the tutorial's content; it indeed teaches how to create a REST API CRUD in Laravel from scratch."

Mentioned in this Video

Tutorial Checklist

1 [1:38] Create a new Laravel project using Composer: `composer create-project laravel/laravel laravel-crud-api`
2 [2:57] Install API scaffolding: `php artisan install:api`
3 [7:12] Create a migration for the students table: `php artisan make:migration create_students_table`
4 [8:04] Edit the migration file to add columns: `name`, `email`, `phone`, `language`. Then run migration: `php artisan migrate`
5 [9:59] Create the Student model: `php artisan make:model Student`. Add `$table = 'students'` and `$fillable` array.
6 [11:08] Create the StudentController: `php artisan make:controller Api/StudentController`. Define methods: `index`, `store`, `show`, `update`, `destroy`, `updatePartial`.
7 [12:01] Define API routes in `routes/api.php` linking to controller methods for GET, POST, PUT, PATCH, DELETE.
8 [14:33] Implement `index()`: fetch all students, return JSON response with status 200 (or 404 if empty).
9 [15:21] Implement `store()`: validate input (name, email, phone, language required; email format), create student, return 201.
10 [20:30] Implement `show($id)`: find student by ID, return 404 if not found, else return student with 200.
11 [21:40] Implement `destroy($id)`: find student, delete if exists, return 'Student deleted' with 200.
12 [22:59] Implement `update(Request $request, $id)`: find student, validate all fields, update and save, return updated student.
13 [25:27] Implement `updatePartial(Request $request, $id)`: validate without required fields, conditionally update present fields, save, return updated student.
14 [28:39] Optional: switch to MySQL by editing `.env` (DB_CONNECTION=mysql, DB_DATABASE, DB_USERNAME, DB_PASSWORD) and run `php artisan migrate`.

Study Flashcards (7)

What is the command to install API scaffolding in Laravel?

easy Click to reveal answer

`php artisan install:api`

[2:57]

In Laravel routes, how do you indicate a dynamic parameter (like an ID)?

easy Click to reveal answer

By wrapping the parameter name in curly braces, e.g., `{id}`.

[5:34]

What is the purpose of the `$fillable` property in a Laravel model?

medium Click to reveal answer

It specifies which attributes can be mass-assigned (filled) when using methods like `create()`.

[10:38]

Which HTTP status code should a successful POST (create) operation return?

medium Click to reveal answer

201 (Created).

[17:42]

What is the key difference between PUT and PATCH HTTP methods in REST APIs?

medium Click to reveal answer

PUT replaces the entire resource; PATCH applies partial updates.

[5:18]

What Laravel class is used to validate request data?

hard Click to reveal answer

`Validator` (from `Illuminate\Support\Facades\Validator`).

[15:38]

How do you check if a request has a specific input field (e.g., 'name') before updating it?

hard Click to reveal answer

Use `if ($request->has('name'))`.

[26:47]

💡 Key Takeaways

💡

Laravel API scaffolding

Introduces the `install:api` command which simplifies setting up dedicated API routes.

[2:57]
🔧

Migration creation pattern

Shows the convention `create_students_table` auto-generates a migration for a 'students' table.

[7:12]
🔧

Validation via Validator facade

Demonstrates server-side input validation using Laravel’s Validator, ensuring data integrity.

[15:21]
📊

Advanced validation rules (unique, digits, in)

Illustrates how to enforce email uniqueness, phone digit count, and allowed language values.

[19:15]
🔧

Conditional partial updates in PATCH

Shows a clean pattern for updating only provided fields using `$request->has()`.

[22:59]

✂️ Creator Tools: Viral Hooks

AI-generated clip ideas for Shorts based on the transcript

¡Crea una REST API CRUD en Laravel!

32s

El video comienza mostrando rápidamente las operaciones CRUD funcionales, enganchando a desarrolladores que quieren ver resultados inmediatos.

▶ Play Clip

Crea un proyecto Laravel desde cero

48s

Muestra paso a paso cómo crear un proyecto Laravel con Composer, esencial para principiantes que quieren empezar desde lo básico.

▶ Play Clip

Configura rutas API en Laravel

56s

Explica la instalación de API y la creación de rutas HTTP comunes (GET, POST, PUT, DELETE), un aprendizaje fundamental para cualquier desarrollador backend.

▶ Play Clip

Crea migraciones y modelos en Laravel

47s

Enseña a crear una tabla de base de datos y su modelo correspondiente usando comandos artisan, habilidad clave para manejar datos en Laravel.

▶ Play Clip

Valida datos de entrada en Laravel

53s

Muestra cómo implementar validaciones con reglas personalizadas (requerido, email único, dígitos), evitando errores comunes y mejorando la seguridad.

▶ Play Clip

[00:00] Hey coders el día de hoy Les traigo un

[00:01] video práctico en donde vamos a aprender

[00:03] Cómo crear una red Api desde php

[00:05] utilizando el framework larabel est es

[00:07] un video bastante práctico en el que

[00:09] ustedes van a ir creando desde cero un

[00:11] ipi y al final van a ir probándolo a

[00:13] través de un programa llamado Thunder

[00:14] cline que es en realidad una extensión

[00:16] de visel Studio code la r Api que vamos

[00:17] a estar creando es muy sencilla lo que

[00:19] nos va a permitir es hacer lo siguiente

[00:20] yo puedo hacer una petición post a mi

[00:22] Api students en donde yo puedo guardar

[00:24] un nombre por ejemplo de un estudiante

[00:26] voy a guardar un nombre que se llama

[00:27] Ryan Rey el estudiante voy a colocarle

[00:29] un cor coro por ejemplo Ryan @gmail o

[00:31] Ryan @m envío y esto crea un registro Y

[00:34] si hago una petición get y envío a

[00:36] estudiantes también puedo obtener una

[00:38] lista de estudiantes que están

[00:39] almacenados en la base de datos también

[00:41] puedo obtener un único estudiante o

[00:43] también puedo eliminar un estudiante con

[00:44] delete puedo eliminar de todos el

[00:46] estudiante uno estudiante eliminado Y si

[00:48] hay una petición que es de todos los

[00:50] estudiantes pues ya no está el

[00:51] estudiante que acabo de eliminar o

[00:52] también puedo actualizar con un put

[00:54] puedo decirle Okay del estudiante número

[00:56] dos Quiero actualizar este Ryan rey por

[00:59] Ryan por ejemplo mcmillan y envío y el

[01:01] dato debería actualizarse sin embargo

[01:03] este correo yo lo tengo que cambiar por

[01:04] ejemplo aquí le digo Debería ser Ryan

[01:06] @gmail envío y con esto se actualiza el

[01:09] dato o si no quiero actualizar todo

[01:10] también puedo enviar un Patch y le digo

[01:11] de estudiantes dos tan solo Quiero

[01:13] actualizar el correo no quiero

[01:14] Actualizar más datos aparte del correo

[01:15] entonces aquí puedo decirle Ryan

[01:17] @outlook y envío y ya estaría entonces

[01:19] lo que estoy creando aquí no es más que

[01:20] un crud de una red sapi pero todo esto

[01:22] lo vamos a crear desde cero creando

[01:24] comandos del arabel alterando nuestro

[01:26] código y luego al final les voy a

[01:28] enseñar Cómo desplegarlo también en voy

[01:30] a enseñar todo el proceso de crear un

[01:31] crw en una red sapi y luego van a poder

[01:33] extenderlo si ustedes continúan

[01:34] estudiando este framework Así que si les

[01:36] interesa pues vamos a empezar lo primero

[01:38] que voy a hacer es crear un proyecto del

[01:40] arabel desde cero Así que voy a abrir

[01:42] una terminal y el primer Comando que voy

[01:43] a ejecutar es el comando C desktop para

[01:45] ubicarme en mi escritorio y voy a estar

[01:47] utilizando El Comando de composer para

[01:48] crear un proyecto si ustedes no lo

[01:50] tienen instalado aún pueden utilizar el

[01:51] video que le dejo en la descripción para

[01:53] aprender cómo instalarlo El Comando es

[01:54] el siguiente es composer ge create

[01:56] project larabel sl larabel Y en este

[01:59] caso el lo vamos a llamar larabel crot o

[02:01] gu crud gu Api y vamos a dar un enter

[02:04] esto lo que va a hacer es ya crear aquí

[02:05] en mi escritorio todo un proyecto de

[02:07] larabel entonces a partir de Aquí vamos

[02:08] a simplemente arrastrarlo dentro de

[02:10] nuestro editor de código y vamos a

[02:12] empezar esperando a que termine de

[02:13] instalarse todas estas dependencias en

[02:15] la terminal aquí Ya terminó de

[02:16] instalarse los paquetes Así que

[02:17] simplemente puedo cerrar la terminal y

[02:19] ahora sí yo puedo venir en visual Studio

[02:21] code y El Comando que voy a estar

[02:22] ejecutando inicialmente para ejecutar el

[02:23] proyecto sería php artisan serf y con

[02:26] esto si doy un enter lo que va a hacer

[02:28] es ejecutar un servidor en el puerto

[02:29] 8000 esto quiere decir que si abro un

[02:31] navegador y escribo el local Host 8000 y

[02:33] doy un enter vamos a dar una bienvenida

[02:35] típica del arabel Okay esta es la página

[02:36] del arabel que nos permite entender que

[02:38] ya el proyecto está funcionando ahora

[02:39] para empezar a editarlo esto ya genera

[02:41] un servidor en vivo lo que significa que

[02:43] si nosotros hacemos alguna edición esto

[02:44] se va a reiniciar automáticamente pero

[02:46] en nuestro caso no vamos a estar

[02:47] utilizando larel para crear algún

[02:49] proyecto que tenga interfaces sino

[02:51] simplemente voy a estar utilizándolo

[02:52] para crear un ipi entonces para poder

[02:54] hacer eso primero voy a venir aquí en la

[02:55] consola voy a cancelarlo con control c y

[02:57] el primer Comando que voy a ejecutar es

[02:59] el comando php p artisan install do. Api

[03:02] si doy un enter esto lo que va a hacer

[03:04] en nuestro proyecto es aquí aparte de la

[03:06] carpeta routes en donde están nuestros

[03:08] archivos de console y web va a aparecer

[03:10] un nuevo archivo que se va a llamar Api

[03:12] y también va a configurar aquí en

[03:13] bootstrap el archivo que va a arrancar

[03:15] la ipi es decir va a poder configurar

[03:17] tanto unas rutas dedicadas a una red Api

[03:20] y en App nosotros vamos a ver que ya lo

[03:22] altera también para que lea ese archivo

[03:23] simplemente para darles un recordatorio

[03:25] en larabel las carpeta r nos sirve para

[03:27] poder crear rutas o Ur les que el

[03:30] navegador puede visitar De hecho aquí en

[03:31] Api ya tenemos una que se llama user

[03:33] pero en mi caso voy a reemplazarla para

[03:35] darles una pequeña idea si nosotros

[03:36] queremos hacer una petición sencilla yo

[03:38] voy a cambiar esto y voy a colocarle

[03:40] rout do pun get y aquí le voy a colocar

[03:42] entre comillas simples y un Slash

[03:44] students por ejemplo entonces supongamos

[03:46] que estoy creando una ipi de estudiantes

[03:47] voy a llamar students y aquí voy a crear

[03:49] una función sencilla y esta función lo

[03:51] que va a hacer es retornar un texto por

[03:52] ejemplo quiero que retorne student list

[03:54] Ahí está entonces coloco un punto y coma

[03:56] aquí al final también un punto y coma y

[03:57] con esto ya tengo una ruta ahora este

[03:59] router no sé que Así sio es un Route y

[04:00] con esto ya estaría en este caso no

[04:02] estoy utilizando el módulo request vamos

[04:04] a ejecutar esto simplemente Recuerden

[04:06] que aquí en la terminal primero tengo

[04:07] que ejecutar algo y por ejemplo aquí lo

[04:09] primero que me pide es que cuando yo

[04:10] ejecute El Comando install Api algo que

[04:12] se me quedó pendiente es Okay una nueva

[04:14] base de datos o una nueva migración de

[04:16] base de datos va a ser ejecutada quieres

[04:17] hacerlo vamos a escribir Yes enter y

[04:19] listo con esto lo que va a hacer es que

[04:21] ahora ha alterado nuestro modelo de base

[04:22] de datos Por cierto cuando composer Crea

[04:25] una base de datos es lo que hace Es que

[04:26] aquí en database Crea una base de datos

[04:28] de sqlite por lo que no necesitan

[04:30] configurar nada de momento Entonces

[04:31] vamos a ejecutar esto php artis and serf

[04:33] Y si doy un enter vamos a venir en

[04:35] nuestro navegador en el local Host 8000

[04:37] sl students Y si doy un enter esto

[04:39] debería llevarme una ruta pero recuerden

[04:41] que como estoy creando una Api esto debe

[04:42] empezar con sl Api sl students y allí

[04:44] veo un texto que dice student list

[04:46] entonces con esto ya estamos

[04:47] respondiendo una petición get o estamos

[04:48] respondiendo algo al cliente cuando

[04:50] visite esa página o en este caso esa URL

[04:53] ahora si nosotros queremos crear un crud

[04:54] vamos a cambiarlo por ejemplo porque no

[04:56] tan Solamente voy a querer obtener

[04:57] estudiantes sino también crearlos

[04:59] actualiz darlo Y eliminarlos entonces lo

[05:01] que yo puedo hacer es copiar esta ruta

[05:02] vamos a pegarlo aquí debajo y ya no va a

[05:04] ser get sino post post a students y Aquí

[05:06] vamos a colocarle un texto que se diga

[05:08] creating students o creando estudiantes

[05:10] luego también voy a copiarlo otra vez

[05:12] voy a pegarlo y también puedo tener un

[05:13] método put o Patch depende de lo que

[05:15] ustedes utilicen put o Patch son

[05:18] similares el put permite actualizar todo

[05:20] un objeto mientras que Patch permite

[05:21] actualizar parcialmente en mi caso voy a

[05:23] escoger put y vamos a colocar students y

[05:24] Aquí vamos a colocar un texto que diga

[05:26] actualizando estudiante Ahora aquí no

[05:29] voy a actualizar todos los estudiantes

[05:31] sin no tan solamente uno de ellos así

[05:32] que una ruta en arabel es colocar un

[05:34] Slash y para indicar que después va a

[05:36] venir un ID voy a colocar entre llaves

[05:37] un ID de esta forma pues indica que aquí

[05:39] voy a tener que colocar un número o

[05:42] algún texto después de students y de

[05:43] hecho esto de aquí lo voy a copiar y lo

[05:45] voy a pegar otra vez porque es lo mismo

[05:46] para el delete y aquí voy a colocarle

[05:48] eliminando estudiante listo con esto

[05:50] Ahora ya tengo el crud completo e

[05:52] incluso así como puedo obtener una lista

[05:53] de estudiantes también puedo obtener uno

[05:55] solo así que voy a copiar esto de aquí

[05:56] voy a pegarlo debajo y también va a

[05:57] funcionar con get Solo que esta ruta va

[05:59] a decir de todo todos los estudiantes

[06:00] quizás tan solo quiero uno de esos

[06:01] estudiantes por ID entonces Aquí voy a

[06:03] colocar obteniendo un estudiante vamos a

[06:06] colocarle y aquí voy a colocarle

[06:08] obteniendo lista de estudiantes listo

[06:10] Entonces con eso ya tengo un crud vamos

[06:12] a probarlo para poder hacerlo yo Les

[06:13] recomiendo que instalen una extensión

[06:14] que se llama Thunder Cent o también

[06:16] pueden hacerlo a través de otro programa

[06:18] o cliente res depende de cuál usen en mi

[06:20] caso voy a buscar Thunder Cent aquí en

[06:22] mis extensiones Okay se escriben de esta

[06:24] forma simplemente vienen aquí y le dan

[06:26] en instalar en mi caso yo ya lo tengo

[06:27] instalado y cuando lo instale van a ver

[06:28] un icono como este un icono de un

[06:30] círculo con un rayo de hecho voy a

[06:32] limpiar aquí mi historial ustedes van a

[06:33] ver algo como esto Vamos a darle un New

[06:34] request y por ejemplo yo puedo hacer una

[06:36] petición get http 2 localhost 8000 slapi

[06:41] students y doy un get y me dice

[06:43] obteniendo la lista de estudiantes puedo

[06:44] colocar de students quiero tan solo uno

[06:46] y me dice obteniendo un estudiante si

[06:48] hago una petición post a students y

[06:50] envío me dice creando estudiantes si

[06:51] hago una petición put vamos a ver Bueno

[06:53] ahí me da un error porque student lleva

[06:54] un ID un uno por ejemplo y ahora sí me

[06:56] hice actualizando estudiante Y si doy un

[06:58] delete con lo mismo ipi si algún número

[07:00] me hice eliminando estudiante Okay ya

[07:01] tengo el crud completo Entonces lo único

[07:03] que me falta ahora es ya no tan

[07:04] solamente Mostrar un texto sino que

[07:05] quiero realmente consultar una base de

[07:07] datos de verdad y quiero buscar o

[07:09] alterar una base de datos Y enviar una

[07:11] respuesta de vuelta entonces lo primero

[07:12] que vamos a hacer es que vamos a crear

[07:14] una migración para poder hacerlo vamos a

[07:15] venir en la terminal de visual Studio

[07:17] code voy a cancelarlo vamos a limpiar y

[07:19] el primer Comando que voy a ejecutar es

[07:20] el comando php artisan y aquí voy a

[07:23] ejecutar El Comando make migration y

[07:25] luego voy a colocar el nombre a una

[07:26] tabla por ejemplo en este caso voy a

[07:27] colocar create student table como el

[07:30] nombre de la migración voy dar un enter

[07:31] Y eso lo que va a hacer es que dentro de

[07:32] nuestro proyecto en la ruta por ejemplo

[07:34] llamada database migrations ha creado un

[07:36] nuevo archivo Aquí está entonces vamos a

[07:38] buscarlo digo database migrations y va a

[07:40] ser el último archivo de hecho el último

[07:42] que lo ha creado en esta fecha doy un

[07:44] click Y esto es lo que ha creado él ha

[07:45] creado una tabla llamada student y aquí

[07:47] por ejemplo pueden ver que he colocado

[07:48] un ID y un timestamp ahora dónde sacó el

[07:50] nombre Bueno cuando yo creé la tabla le

[07:52] coloqué create y le coloqué el nombre de

[07:54] la tabla student Table Okay entonces de

[07:56] esta forma es como yo al final voy a

[07:58] poder decirle Okay este es el nombre de

[08:00] la tabla Pero bueno vamos a alterar un

[08:01] poco porque yo no quiero tan solamente

[08:02] un ID y fecha sino que también quiero

[08:04] colocar un nombre un correo y demás

[08:06] Entonces por ejemplo yo puedo copiar

[08:07] esta línea y le digo también así como

[08:09] voy a recibir un table ID voy a recibir

[08:10] un table stram y aquí yo espero que la

[08:12] columna de la tabla se llama name luego

[08:14] puedo copiar esto también le digo quiero

[08:15] esperar un email vamos a copiarlo otra

[08:17] vez voy a esperar un font vamos a

[08:19] copiarlo otra vez quiero esperar un

[08:20] Language un lenguaje del estudiante Por

[08:22] ejemplo si está aprendiendo algún

[08:23] lenguaje de programación por ejemplo y

[08:25] ya estaría Entonces esta es la tabla al

[08:26] final que yo quiero que se cree ya sea

[08:28] en una tabla s sql como puede ser mysql

[08:31] o mysql o sql server o sqlite en este

[08:34] caso como estamos en sqlite se va a

[08:36] crear en esa base de datos si ustedes

[08:38] quieren ver qué es lo que tiene la base

[08:39] de datos de sqlite yo Les recomiendo que

[08:41] instalen una extensión de visual Studio

[08:42] code que se llama sqlite vier de hecho

[08:45] pueden buscarlo como sqlite y van a

[08:46] llegar en esta extensión de aquí sqlite

[08:48] vier y simplemente lo instalan y una vez

[08:50] instalado lo que va a hacer o lo que le

[08:51] va a permitir visual Studio c es ahora

[08:53] verlo aquí mismo dentro de una pestaña

[08:55] es decir pueden ir a la base de datos de

[08:57] database sqlite dan un clic derecho y le

[08:58] dan open en Wi y aquí colocan sqlite

[09:01] Beer da un click y pueden ver que aquí

[09:02] ahora tenemos las tablas que están

[09:03] dentro de sqlite es decir hay una tabla

[09:05] uses hay una tabla sessions y demás es

[09:08] decir las tablas que crea eh larbel

[09:09] cuando se crea un proyecto nuevo pero

[09:11] bueno en nuestro caso como podemos ver

[09:13] no vemos la tabla student porque tenemos

[09:15] que migrar la es decir tenemos que

[09:16] transformar este código de aquí en una

[09:18] tabla por suerte no se hace manualmente

[09:19] sino que vamos a abrir la terminal y el

[09:21] siguiente Comando que voy a ejecutar es

[09:22] el comando php artisan migrate y lo que

[09:25] va a hacer es que va a leer el código y

[09:27] ahora si nuevamente abro mi base de

[09:28] datos clic derecho Open with vamos a

[09:30] colocarle esq vier vamos a ver que ahora

[09:33] Aquí está mi tabla student Y si yo abro

[09:34] Aquí está el ID el name el email el font

[09:36] el Language la fecha de creación y

[09:37] actualización que es justamente ese Time

[09:39] stamp que venía en el propio modelo

[09:41] cuando lo abrimos es decir este de aquí

[09:43] ahora con esto hemos creado una tabla

[09:44] Pero así como tenemos una tabla tenemos

[09:46] que crear código en nuestra aplicación

[09:48] para poder interactuar con esa tabla

[09:50] porque de momento lo único modelo que

[09:51] tengo aquí es el modelo de usuario que

[09:53] es una forma de poder Consultar los

[09:55] datos de un usuario pero ahora como

[09:56] tengo una tabla también de estudiantes

[09:58] Quiero crear un modelo de estudiantes

[09:59] entonces también se hace con un comando

[10:01] de terminal Así que puedo venir en la

[10:02] terminal y puedo decir php artisan y ya

[10:05] no migration sino model y Aquí vamos a

[10:07] llamarle a este modelo student con una s

[10:09] mayúscula porque los modelos Por lo

[10:11] general empiezan de esa forma user

[10:12] student con con la primera letra

[10:14] mayúscula doy un enter ya se lo que va a

[10:15] crear es un nuevo archivo llamado studen

[10:17] php como pueden ver y aquí es donde

[10:18] vamos a alterarlo por defecto él crea

[10:20] Aquí una especie de template nosotros lo

[10:22] que vamos a hacer es extender ese

[10:23] template entonces debajo de H Factory

[10:25] voy a colocarle protected y aquí voy a

[10:27] colocarle el nombre de una variable que

[10:29] es Table y el nombre va a ser igual a

[10:31] student por ejemplo este es el nombre de

[10:33] la tabla o bueno en este caso es el

[10:34] nombre del modelo que va a estar

[10:36] relacionado con esta tabla lo siguiente

[10:37] que voy a decir es protected nuevamente

[10:38] y voy a colocarle un fillable que es

[10:40] básicamente para decirle qué Campos van

[10:42] a poder ser alterados y aquí voy a

[10:44] nombrar los campos de name email address

[10:47] y font de hecho si ustedes verifican

[10:49] estos datos de aquí y vienen en la

[10:51] migración es decir en database

[10:53] migrations en el último archivo name

[10:55] email font y lenguage es lo que necesito

[10:57] Así que aquí sería lo mismo name email y

[10:59] Language y aquí un punto y coma al final

[11:01] del arreglo para simplemente decirle que

[11:04] esos son los únicos Campos una vez tengo

[11:05] el modelo lo siguiente es crear un

[11:07] controlador Entonces vamos a abrir la

[11:08] terminal nuevamente y el siguiente

[11:09] Comando que voy a hacer es ejecutar php

[11:11] artisan May controller y luego un nombre

[11:14] para nuestro controlador en este caso

[11:15] voy a llamarle student controller y doy

[11:18] un enter esto lo que hace de hecho es

[11:19] que si nosotros entramos en App en http

[11:21] vamos a ver que ahora hay un student

[11:22] controller De hecho si ustedes no les

[11:24] gusta que esté aquí o quieren ordenarlo

[11:26] un poco mejor lo pueden eliminar y

[11:27] pueden volver a ejecutar El Comando pero

[11:28] le pueden colocar un Slash al inicio

[11:30] pueden decirle que vaya por inicio en

[11:32] una carpeta Api Slash student controller

[11:34] y da un enter y lo vo a volver a crear

[11:36] Pero dentro de una carpeta Api entonces

[11:37] este student controller lo que va a

[11:39] tener justamente los métodos o las

[11:41] funciones que se van a ejecutar cuando

[11:43] se visite alguna URL por ejemplo aquí yo

[11:45] puedo crear en esta clase de student

[11:47] controller una función nueva que va a

[11:49] ser pública es decir va a poder ser

[11:50] accedida vamos a colocarle Index y

[11:52] debajo voy a decirle que va a retornar

[11:54] un texto que diga obteniendo lista de

[11:55] estudiantes Este es un método que al

[11:57] final cualquier otro parte del código

[11:59] puede llamarlo si vengo nuevamente en la

[12:01] carpeta routes en Api y aquí por ejemplo

[12:04] yo tengo mi ruta que se llama students

[12:05] en lugar de tenerlo aquí que dice

[12:06] obteniendo lista de estudiantes vamos a

[12:08] quitar esa función y voy a llamarlo

[12:10] desde el controller Pero primero tengo

[12:11] que importarlo le digo vas a utilizar

[12:12] desde app y aquí empezamos a nombrar

[12:15] cada uno de esos de hecho es de use app

[12:17] y bueno desde aquí vamos a colocarle una

[12:19] contrabarra le coloco http controll Api

[12:21] studion controller punto y coma y aquí

[12:23] le digo desde aquí voy a llamar la

[12:25] función vamos a colocarle un un arril y

[12:27] aquí voy a llamarle student controller

[12:29] dos puntos dos puntos y vamos a

[12:31] colocarle una clase y aquí le colocamos

[12:33] el nombre del método en este caso se va

[12:34] a llamar Index porque así le llamé yo De

[12:36] hecho si ustedes Ven aquí dice

[12:37] obteniendo lista de estudiantes vamos a

[12:39] colocarle desde el controller entonces

[12:41] si yo guardo esto y vengo a la terminal

[12:42] Y nuevamente escribo php artisan serf y

[12:46] si vengo aquí en el navegador y refresco

[12:47] pueden ver que di obteniendo lista de

[12:49] estudiantes desde el controller ahora

[12:50] por supuesto nosotros no vamos a querer

[12:52] tan solo ver un texto sino que vamos a

[12:54] querer consultar una base de datos Así

[12:55] que lo que vamos a hacer es que en lugar

[12:57] de tan solamente retornar un texto esto

[12:59] vamos a consultar trayendo el modelo de

[13:01] datos entonces Aquí voy a decirle

[13:03] también voy a utilizar desde app y aquí

[13:05] llamamos models student punto y coma y

[13:08] aquí le voy a colocar Okay voy a llamar

[13:09] el modelo estudiantes este tiene un

[13:11] método llamado all voy a colocar en

[13:13] punto y coma y esto lo que me va a

[13:14] retornar es una lista voy a decir un

[13:16] arreglo de datos Aquí voy a guardar una

[13:17] variable llamada students y este

[13:19] students lo que voy a hacer es que

[13:20] primero voy a confirmar si no está vacío

[13:22] Porque si este arreglo está vacío lo que

[13:24] va a hacer es que no voy a poder

[13:25] retornar nada de hecho incluso yo puedo

[13:27] retornarlo directamente puedo decir en

[13:28] lugar de ese ret un texto le puedo decir

[13:30] voy a retornar un response vamos a

[13:32] colocar la función y le digo voy a

[13:34] retornar un método Jason y aquí adentro

[13:36] le coloco el arreglo la variable

[13:38] students con un método 200 que significa

[13:40] que todo fue bien si yo guardo esto y

[13:42] vengo aquí en la aplicación y refresco

[13:43] pueden ver que me Der rotor un arreglo

[13:45] vacío pero bueno quizás ustedes no

[13:46] quieren retornar Esto entonces lo que

[13:47] podemos hacer es que antes yo le puedo

[13:49] colocar una condicional y le digo si

[13:51] estudiantes está vacío si is empty

[13:53] entonces voy a retornar un mensaje o un

[13:55] texto aquí que diga no hay estudiantes

[13:57] registrados de hecho si ustedes quieren

[13:59] eh ordenarlo Incluso un poco mejor lo

[14:01] que pueden hacer aquí es crear una

[14:02] variable que se llame Data y aquí pueden

[14:04] colocarle que primero van a esperar un

[14:06] mensaje y luego un estatus por ejemplo

[14:08] vamos a colocarle aquí un estatus que

[14:10] sea 404 si coloco un punto y coma y

[14:13] luego le pueden recién decir voy a

[14:14] retornar aquí el mensaje que va a ser un

[14:15] response con los datos Entonces esto es

[14:17] bl un poco más ordenado entonces si yo

[14:19] guardo y como no hay datos si yo

[14:20] refresco aquí me dice no se encontraron

[14:22] estudiantes estatus 404 en realidad no

[14:24] Debería ser un 404 Debería ser un 200

[14:26] nada más porque la respuesta Sí fue

[14:28] correcta Solo que aquí no no hubieron

[14:30] nada o decir No se encontró nada

[14:31] estudiantes Okay el enfoque de retornar

[14:33] el arreglo tampoco es incorrecto Así que

[14:35] también lo pueden utilizar solamente es

[14:36] para mostrarles otro eh otra forma de

[14:38] responder De hecho si ustedes quieren

[14:40] retornar esto de aquí también pueden

[14:42] hacer lo mismo Pueden decir voy a

[14:43] retornar un arreglo Data va a estar

[14:45] conformado tanto por students vamos a

[14:46] colocarle students que va a ser el

[14:48] arreglo de estudiantes y luego un

[14:49] estatus 200 como mensaje entonces Esto

[14:51] va va a convertirse en un Jon Entonces

[14:53] le digo voy a retornar aquí un Data y

[14:54] aquí un punto y coma y si guardo y vengo

[14:56] en la aplicación y refresco me retorna

[14:58] studens vacíos un estatus 200 ahora

[15:00] nosotros no tan Solamente vamos a querer

[15:01] listar sino que vamos a querer crear

[15:03] también entonces vamos a crear otra

[15:05] función aquí debajo esta función vamos a

[15:07] Bueno Este es un método de hecho vamos a

[15:09] llamarle un public function y este se va

[15:12] a llamar Store por ejemplo de almacenar

[15:15] y lo que va a esperar es un dato que

[15:16] viene desde el frontend esto lo recibe a

[15:17] través de un objeto request que y lo va

[15:19] a guardar una variable request adentro

[15:21] lo primero que vamos a hacer es que

[15:22] cuando recibamos un dato vamos a

[15:23] validarlo es decir cuando yo voy a

[15:25] enviar un dato aquí en el Store primero

[15:27] voy a recibir algo desde el cliente y

[15:29] tengo que esperar que ese dato sea

[15:30] correcto por suerte para validar larbel

[15:33] ya incluye un paquete para poder hacer

[15:34] eso entonces puedo venir aquí y le puedo

[15:35] decir use y vamos a colocarle aquí un

[15:37] paquete que se llama illuminate super

[15:40] fake Case y validator y aquí nosotros ya

[15:42] podemos llamarlo en el Store por ejemplo

[15:43] voy a decir de validator vamos a

[15:45] colocarle eh dos puntos make y aquí voy

[15:47] a colocar una variable que se llama

[15:49] request all lo voy a ejecutar y luego

[15:51] vamos a colocar el arreglo de datos que

[15:53] voy a esperar validar Por ejemplo yo voy

[15:54] a esperar me pasen por ejemplo un name

[15:56] un email un font y un Language pero los

[15:59] datos que yo voy a validar aquí son que

[16:00] todos son requeridos y el ime la parte

[16:02] de requerido aquí le colocan un Pipe es

[16:04] decir como un un palito aquí y en este

[16:06] caso se le coloqué también un correo Es

[16:08] decir debe aparentar un Stream que sea

[16:09] un correo un punto y como al final y el

[16:11] validator lo que me va a retornar al

[16:13] final es justamente un una respuesta

[16:16] vamos a colocarle aquí validator en una

[16:17] variable en minúscula y de hecho aquí me

[16:19] da un error el validator porque aquí lo

[16:21] he escrito mal aquí Debería ser con u

[16:23] illuminate Ahora sí y listo ahora con

[16:25] este objeto validator nosotros podemos

[16:27] ejecutar una función un un método que

[16:29] diga si el validator y aquí le llamamos

[16:31] si su método fails es decir si esto

[16:33] falla de hecho Aquí vamos a colocarle un

[16:35] guión si esto falla es decir si al final

[16:37] hay un error en la validación pues vamos

[16:39] a colocarle una respuesta vamos a crear

[16:41] una variable Data y le digo que voy a

[16:42] retornar un mensaje que diga error en la

[16:44] validación de datos voy a mostrar los

[16:46] errores y un estatus 400 que significa

[16:47] que todo fue incorrecto el dato que me

[16:49] envió y luego le voy a retornar esto al

[16:51] cliente un response con un json Data con

[16:53] un estatus 400 ahora si en todo caso los

[16:56] datos que me envió son correctos es

[16:57] decir no hubo ningún error entonces lo

[16:59] que voy a hacer es crear una variable

[17:00] llamada student voy a guardar aquí y voy

[17:02] a decirle que del modelo student voy a

[17:04] estar creando algo de hecho aquí no es

[17:06] created sino create Aquí voy a ejecutar

[17:09] esta función y adentro voy a colocarle

[17:11] un arreglo con los datos que le voy a

[17:12] pasar que en este caso sería el name el

[17:14] email font y el Language por supuesto

[17:16] todo estos vienen de request que es

[17:17] justamente el dato que envía el cliente

[17:19] la aplicación cliente Aquí voy a colocar

[17:21] un punto y coma y finalmente con esto le

[17:23] digo si no hay un estudiante Al momento

[17:24] de guardar si no pudiste crear un

[17:26] estudiante entonces voy a retornar un

[17:28] Data con un mensaje que diga r crear al

[17:30] estudiante un estatus 500 y retorno

[17:31] estro al cliente pero si en todo caso sí

[17:33] pudo crearlo entonces lo que voy a hacer

[17:35] es retornar otro arreglo Data Aquí voy a

[17:38] decirle que voy a retornar un estudiante

[17:40] nuevo estatus 201 y voy a retornar esto

[17:42] return response Jason Data 201 si yo

[17:45] guardo esto intento crearlo entonces lo

[17:47] que voy a hacer Es que voy a abrir un

[17:49] Thunder client y por ejemplo voy a venir

[17:51] en la petición y aquí voy a decirle voy

[17:52] a enviar una petición post a Api

[17:54] students y vamos a escoger aquí en esta

[17:56] sección donde dice Body el dato que

[17:58] queremos enviarle Aquí voy a colocar un

[17:59] objeto Jason y voy a colocarle algo

[18:01] sencillo por ejemplo vamos a colocarle

[18:03] un dato vacío y envío y Bueno aquí me

[18:05] está dando el dato creando estudiantes

[18:07] Porque si bien he creado el controlador

[18:08] no lo estoy usando vamos a venir en en

[18:10] el archivo De Api y aquí donde tenemos

[18:12] que crear en el post vamos a quitar esta

[18:14] función y es el proceso similar al que

[18:16] tenemos arriba es decir llamo el studing

[18:18] controller de su Class el método Store

[18:20] guardo y ahora sí esto reinicia el

[18:22] código y si vengo aquí nuevamente y

[18:24] envío vamos a ver que me retor un

[18:25] mensaje de error y me dice error en la

[18:27] validación de los datos el nombre el

[18:28] campo del nombre es requerido el email

[18:30] es requerido el fone es requerido y el

[18:31] Language también okay Este es el

[18:32] validator vamos a colocar los datos

[18:34] correctos me dice el name es requerido

[18:35] vamos a colocarle un name vamos a

[18:37] colocarle cualquier cosa el email es

[18:39] requerido vamos a colocarle cualquier

[18:41] cosa y lo mismo vamos a copiar un esto

[18:43] un par de veces y vamos a pegarlo y

[18:45] vamos a colocarle también espero un font

[18:46] y un Language de hecho solamente uno más

[18:48] voy a quitar uno de aquí y sería un font

[18:50] y un Language en el font voy a enviar

[18:52] todo esto Vamos a darle enviar Y de

[18:53] nuevo me están diciendo el dato que es

[18:54] requerido bueno por aquí colocado una

[18:56] coma vamos a enviarlo y ahora sí ha

[18:58] validado nuevamente y solo me dice que

[18:59] el email debería lucir como una

[19:00] dirección de email entonces aquí le digo

[19:02] okay esto es test @test comom y Si yo

[19:05] envío pues ahora ya pedo crear un dato

[19:06] dentro de la base de datos de hecho sé

[19:08] que ha creado un dato porque aquí me ha

[19:09] retornado también un ID y también una

[19:11] fecha de creación y actualización

[19:12] Entonces estos tres datos se generan en

[19:13] la base de datos estos son los que yo le

[19:14] envié ahora si ustedes quieren colocarle

[19:16] algun unas validaciones un poco más

[19:18] digamos producidas o extensas pues

[19:20] pueden colocar el nombre es requerido y

[19:22] Máximo pueden colocarle que es de 255

[19:25] esto debe ser un email y debe ser único

[19:27] también esto significa que si a crear un

[19:29] estudiante con ese email pues ya no se

[19:30] va a poder repetir el font también

[19:32] pueden colocarle que esto espera un

[19:34] dígito pueden colocarle un or y pueden

[19:36] decirle que espera un dígito de 10 y

[19:38] aquí abajo le puedo decir requerido e

[19:39] lenguaje tan solo pueden enviarme por

[19:41] ejemplo vamos a colocar lenguaje de

[19:42] algunos idiomas Yo solo eso que me pase

[19:44] un texto que sea english spanish y

[19:46] también francés Entonces si no me pasa

[19:48] ninguno de estos streams va a dar error

[19:49] guardo envío me da un error me dice el

[19:51] email ya está tomado Okay entonces tengo

[19:53] que crear otro email test 2 El font

[19:55] Debería ser 10 dígitos Okay el teléfono

[19:57] 1 2 3 4 5 se envío el lenguaje es

[20:00] inválido el lenguaje Debería ser alguno

[20:02] de los lenguajes spanish por ejemplo

[20:04] envío y ahora sí lo ha creado Ahora sí

[20:06] está validando la creación de datos Y

[20:08] como ya habíamos hecho el get si yo hago

[20:09] un get ipi students vamos a ver ahora un

[20:11] arreglo con los dos usuarios que ya

[20:13] había creado Esto es lo mismo desde el

[20:14] navegador si yo refresco pueden ver que

[20:15] í están los dos estudiantes creados

[20:17] listo lo que vamos a hacer ahora es

[20:18] entonces crear una función que nos va a

[20:20] permitir poder obtener un estudiante es

[20:22] decir aquí yo estoy listando todos los

[20:24] estudiantes aquí estoy creando también

[20:25] voy a crear otra función para obtener un

[20:26] solo estudiante entonces voy a decir

[20:28] public function o se llamale show esta

[20:30] función va a esperar un parámetro un ID

[20:32] para buscar y aquí le voy a decir voy a

[20:34] buscar un estudiante y este estudiante

[20:36] va a buscarse el modelo con el método

[20:38] find y aquí nosotros hacemos una

[20:39] validación le digo si no encontraste un

[20:41] estudiante vas a retornar retornar

[20:43] estudiante no encontrado estatus 400 y

[20:45] es lo que vas a retornar al cliente este

[20:46] Jason caso contrario Aquí voy a decirle

[20:49] vas a crear una variable llamada Data

[20:51] vas a retornar al estudiante con código

[20:52] 200 y esto es lo que al final vas a

[20:54] retornarle al cliente y para que eso

[20:56] funcione también lo tenemos que Añadir

[20:57] en Api entonces vengo aquí aquí en Api y

[20:59] así como tengo este students ID voy a

[21:01] quitar todo esto y voy a decirle que

[21:03] aquí voy a colocar un arreglo que diga

[21:05] student control Class show Entonces

[21:07] ahora sí si yo vengo en Thunder client y

[21:09] digo voy a hacer una petición get de

[21:10] estudiantes y quiero tan solo el

[21:12] estudiante uno o el estudiante dos

[21:13] simplemente coloco Slash un y me da el

[21:15] estudiante uno esto también es igual en

[21:16] el navegador porque el navegador permite

[21:18] hacer peticiones get en la URL entonces

[21:20] digo estudiantes dos ahí está el

[21:21] estudiante 2s el estudiante uno ahí está

[21:23] el estudiante uno okay con todos sus

[21:25] datos listo entonces esa es la forma de

[21:26] pedir un solo estudiante Ahora hay otra

[21:28] función que también es muy similar que

[21:30] al obtener un dato y es la función de

[21:32] eliminar porque el eliminar también no

[21:34] solo permite Buscar un usuario es decir

[21:36] No solo permite buscarlo sino que va a

[21:38] buscar y luego eliminar Entonces vamos a

[21:40] hacerlo también vamos a empezar con

[21:42] eliminar les digo voy a crear otra

[21:43] función un public function se va a

[21:44] llamar destroyed por ejemplo no puede

[21:46] puede colocarle Cualquier nombre vamos a

[21:48] colocarle que también espera un ID y

[21:49] aquí le voy a decir vo a crear una

[21:51] variable student que va a ser igual

[21:52] student pun find y este student pun F va

[21:54] a buscar el ID Aquí vamos a colocar lo

[21:56] mismo si no hay un estudiante De hecho

[21:58] voy a ir por partes para que no se les

[22:00] haga tan complicado aquí primero Busco

[22:02] el estudiante con el modelo de datos y

[22:03] le digo si no hay un estudiante pues

[22:05] vamos a colocarle que responde un Data

[22:07] con un arreglo que diga message 404 pero

[22:10] si sí hay un estudiante simplemente

[22:11] vamos a ejecutar el método llamado

[22:13] student delete que es lo que realmente

[22:15] quita el registro de la base de datos y

[22:17] ya luego después creo una variable Data

[22:19] que va a responder algo al cliente le

[22:20] digo el mensaje estudiante eliminado y

[22:22] finalmente retorno un mensaje al cliente

[22:24] guardo todo esto y ya con esta petición

[22:27] tan sencilla si vengo en Api students en

[22:29] delete delete Api student un envío me

[22:32] dice eliminando estudiante y Bueno aquí

[22:34] me dice esto y no está ejecutando la

[22:35] lógica porque en Api también me faltó

[22:37] venir aquí en delete y quitar esta

[22:39] función y cambiarlo por studen

[22:41] controller Class destroy Ahora sí vamos

[22:43] a venir aquí en en Api delete Api

[22:45] student 1 envío y mis estudiante

[22:47] eliminado si yo lo vuelvo a buscar mis

[22:49] estudiante no he encontrado De hecho si

[22:50] yo vengo aquí en students en la lista de

[22:52] estudiantes pueden ver que solo está el

[22:54] estudiante dos no está el estudiante uno

[22:56] okay Entonces ya está eliminando ahora

[22:57] para actualizar eh De hecho es una

[22:59] combinación en el que vamos a recibir un

[23:01] ID y también vamos a recibir un request

[23:03] Porque con el ID yo voy a buscar un dato

[23:04] y con request yo voy a colocarle los

[23:06] nuevos datos entonces para poder hacer

[23:07] eso voy a venir aquí en public voy a

[23:09] colocarle function vamos a colocarle

[23:11] update voy a colocarle Aquí request

[23:13] request voy a colocar un dó ID y aquí lo

[23:16] primero que voy a hacer es buscar al

[23:17] estudiante me digo vas a buscar un

[23:19] estudiante con el modelo de student vas

[23:21] a buscar por ID vamos a colocar el ID

[23:23] con un punto y coma y luego vamos a

[23:25] colocar lo mismo si no encontraste un

[23:26] estudiante retorno 404 Y responde algo

[23:29] al cliente con el mensaje 404 estudiante

[23:31] no ha encontrado luego en todo caso si

[23:33] sí encontró al estudiante vamos a

[23:34] validar el request es decir los datos

[23:36] del request ent vamos a colocarle aquí

[23:38] debajo le digo de validator nuevamente

[23:40] con los mismos datos de hecho name email

[23:42] font y Language y aquí le voy a decir

[23:44] vamos a validar estos datos vamos a

[23:46] colocarle validator al objeto y debajo

[23:48] lo mismo que cuando creamos le digo si

[23:49] el validator falla si validator fails

[23:52] entonces voy a colocar error en la

[23:54] validación y allí el cliente va a poder

[23:55] recibir los errores que está cometiendo

[23:57] mal pero si él lo hace bien envía los

[23:59] datos correctos pues lo siguiente es

[24:00] actualizarlo Entonces le digo del

[24:02] estudiante que has encontrado en su

[24:03] propiedad name vas a colocar el request

[24:05] name el email con el request email y así

[24:08] con cada dato que me he enviado para

[24:09] actualizar finalmente luego lo guardo le

[24:11] digo de todas esas modificaciones voy a

[24:12] guardar esos datos y finalmente voy a

[24:14] crear una variable Data que es lo que va

[24:15] va a retornar el cliente es decir el

[24:17] estudiante actualizado con el estatus

[24:19] 200 e incluso también puedo colocarle un

[24:21] message aquí que dígalo como estudiante

[24:23] actualizado y finalmente retorno esto al

[24:25] cliente guardo esto y si quiero ver este

[24:28] código o la ejecución de este código

[24:29] Pues voy a venir en Thunder Cent y le

[24:31] voy a decir voy a hacer otra petición

[24:32] pero recuerden que aquí he creado el

[24:33] controller tengo que venir en Api Y

[24:35] actualizarlo entonces aquí este put voy

[24:37] a colocar aquí un student controller

[24:38] update Y si guardo ya tengo mi crud

[24:40] hecho de esta Api Entonces ya puedo

[24:42] empezar a probar aquí en Api studens le

[24:44] digo voy a hacer una petición put del

[24:46] estudiante dos sería en todo caso porque

[24:48] es el único que tengo si yo busco el uno

[24:49] y envío me dice estudiante no he

[24:51] encontrado pero si envío un un número

[24:52] dos y los datos nuevos por ejemplo voy a

[24:54] colocarle el nombre de este estudiante

[24:55] voy a colocarle Ryan rey por ejemplo en

[24:58] emil voy a colocarle rayan @m.com en

[25:02] font vamos a dejar el número í y

[25:03] Language enviar y ahora me responde el

[25:05] dato actualizado si yo refresco Aquí

[25:07] también me responde el dato que el id2

[25:09] ha sido actualizado con todos estos

[25:10] Campos listo Entonces es también es el

[25:12] put ahora lo que pasa aquí es que el put

[25:14] si yo no le coloco un dato por ejemplo

[25:16] Supongo que yo no quiero actualizar

[25:17] Language y envío Esto me dice que falta

[25:19] el Language es decir porque el put trata

[25:21] de actualizar todo el objeto y es

[25:22] correcto entonces lo que voy a hacer es

[25:24] también Añadir una ruta Patch entonces

[25:26] voy a cerrar aquí y le digo Okay voy a

[25:27] crear una ruta ruta más que es una ruta

[25:29] Patch students ID también pero va a

[25:31] funcionar en lugar de put con Patch y el

[25:33] controller vamos a colocarle update

[25:35] partial es decir vamos a crear un un

[25:37] método del controlador que se llama

[25:38] update partial que es igual que el resto

[25:40] solamente que se llama de esta forma

[25:41] entonces guardo y ahora vengo en student

[25:43] controller y vamos a crear otro más voy

[25:44] a minimizar esta función voy a venir

[25:46] aquí debajo le voy a decir public voy

[25:47] cre otra función llamada update partial

[25:49] y lo mismo voy a esperar un request una

[25:51] variable request de tipo request voy a

[25:53] colocar un ID voy a colocarle aquí

[25:55] buscando un estudiante un student voy a

[25:58] Buscar del modelo estudiante si no

[25:59] existe un mensaje y un return okay Ahí

[26:03] va y luego si si se encontró estudiante

[26:05] voy a colocarle un validator y la

[26:07] diferencia Aquí está en el validator

[26:08] porque el validator lo que va a hacer es

[26:10] que ya no espera un requerido es decir

[26:11] pues esto pueden venir cualquiera uno

[26:13] solo y pueden ver que ya no está el

[26:14] require solo que ahora Él espera que el

[26:16] nombre sea bueno igual que el anterior

[26:17] un máximo 255 de caracteres un email que

[26:21] sea único los dígito de 10 pero lo único

[26:23] que le ha quitado es el require es decir

[26:24] cualquiera puede venir y No

[26:26] necesariamente tiene que venir el resto

[26:27] y ya luego lo mismo si validator fails

[26:30] retorna un mensaje que diga el error con

[26:31] la lista de errores y si no pues aquí

[26:33] viene lo nuevo porque si estoy

[26:35] recibiendo un campo name solo voy a

[26:36] querer actualizar ese si Scion email y

[26:39] demás pues tan solo voy a querer

[26:40] actualizar un campo individualmente

[26:41] entonces lo que vamos a hacer es colocar

[26:43] aquí debajo vamos a colocarle aquí una

[26:45] especie de condicional le digo si

[26:47] request el objeto request que me está

[26:48] enviando el cliente tiene la propiedad

[26:50] name entonces voy a actualizar es

[26:51] estudiante que encontrado en su propi

[26:53] name Lo mismo para el resto si

[26:54] estudiante tiene el email si estudiante

[26:56] tiene el font si estudiante tiene tiene

[26:58] el Language entonces sol lo voy a

[26:59] actualizar cada uno de esos y finalmente

[27:01] voy a guardarlo cuando ya modifique cada

[27:03] uno de esos Campos individualmente

[27:04] finalmente voy a retornar una variable

[27:06] que se llame Data con un mensaje que

[27:07] diga estudiante actualizado y finalmente

[27:09] retorno esto al cliente Si guardo esto y

[27:11] vengo Ahora sí en Thunder client

[27:13] nuevamente y le digo voy a hacer ya no

[27:14] un put sino un Patch vamos a colocarle a

[27:16] ipi student 2 y dig no quiero actualizar

[27:18] todos los datos sino que Quiero

[27:20] actualizar el nombre nada más pues aquí

[27:21] le digo vamos a colocar Jo mcmillan y

[27:24] envío y este es el único campo que se ha

[27:25] actualizado en estudiante 2s y yo vengo

[27:27] aquí en en cliente y refresco debería

[27:29] actualizarse pero lo que pasa es que

[27:31] quizás no está utilizando el controller

[27:33] vamos a verlo en Api tengo el Patch

[27:35] student ID update partial vamos a ver si

[27:37] se llama así update partial De hecho

[27:39] aquí no se ha ejecutado correctamente

[27:41] vamos a volver a enviarlo Y al parecer

[27:42] me está enviando el mismo dato que estoy

[27:44] recibiendo vamos a ver por qué Ah bueno

[27:46] aquí me está enviando Data y Data no

[27:48] luce de esta forma voy a venir

[27:49] nuevamente en Api en rout Patch students

[27:52] ID voy a cancelar aquí el servidor y voy

[27:54] a volver a ejecutarlo quizás ha fallado

[27:56] eso Okay vamos a volver a hacer el

[27:58] update voy a cambiarlo a un students un

[28:00] a ver si cambia el valor estudiantes dos

[28:02] envío y tan solo está actualizando eso

[28:04] pero en realidad no lo está cambiando De

[28:06] hecho aquí la razón de que me esté

[28:07] devolviendo esto por aquí tengo un

[28:08] return que se añadió con el copilot

[28:10] Bueno vamos a quitarlo en el validator

[28:12] antes no tenemos que hacer nada Solo

[28:13] validar eso vamos a enviar nuevamente y

[28:15] ahora sí ya lo está actualizando como

[28:16] pueden ver son los mismos datos

[28:18] solamente que ha cambiado el name Luego

[28:19] si ustedes quieren actualizar otros

[28:20] datos pues colocan aquí un email y le

[28:23] dice también Quiero actualizar el email

[28:24] no va a ser Ryan sino Joe envían y esto

[28:26] falla porque el email Debería ser un

[28:28] email válido entonces voy a colocarle y

[28:31] @b.clean

[28:38] a querer utilizar mysql entonces una

[28:41] forma de modificar esto es si ustedes

[28:42] tienen mysql instalado en mi caso yo

[28:44] tengo aquí un programa que se llama Sam

[28:45] es un programa bastante utilizado desde

[28:47] hace mucho tiempo entonces voy a usar

[28:49] este de aquí pero ustedes de nuevo

[28:50] pueden utilizar una instalación

[28:52] individual de may sql o docker o lo que

[28:54] prefieran vamos a iniciar esto tengo May

[28:56] sql y bueno lo único que voy a hacer es

[28:57] que si si quiero crearlo en May sql voy

[28:59] a venir en en este caso en la base de

[29:01] datos de may sql esto abr una pestaña

[29:03] nueva Ahí está inicializando y Bueno voy

[29:05] a crear una base de datos nueva por

[29:06] ejemplo voy a crear aquí una base de

[29:08] datos que se llame larabel Api db crear

[29:11] y nada más no necesito nada más entonces

[29:13] si yo vengo ahora en el código y quiero

[29:15] cambiar la base de datos es tan fácil

[29:16] como venir env y aquí en la sección de

[29:19] db connection vamos a alterarlo por

[29:21] ejemplo en db connection ya no va a ser

[29:22] sqlite sino va a ser May sql en db Host

[29:25] vamos a dejarle 12701 330 para el puerto

[29:28] en db database el nombre que que

[29:30] acabamos de crear lel Api db en usuario

[29:33] root y en el password voy a dejarlo

[29:34] vacío si yo guardo esto y vengo aquí en

[29:36] la consola voy a cancelarlo y para

[29:38] ejecutar esto simplemente le digo php

[29:40] artisan migrate Y si doy un enter esto

[29:42] lo que va a hacer es crear la tabla

[29:44] entonces si yo vengo ahora en en arab

[29:46] lap db vamos a ver que aquí están todas

[29:48] las tablas creadas para May sql entonces

[29:50] aquí también yo puedo ver el student

[29:52] pero que también puedan ver la lista de

[29:53] datos que puedo guardar aquí de hecho si

[29:55] yo ejecuto esto nuevamente como php

[29:56] artisan serve Y hago las mismas

[29:58] peticiones vengo aquí en tunder cin

[30:00] intento hacer un post e intento enviar

[30:02] los datos le digo the student tengo que

[30:03] enviar un name De hecho voy a copiar

[30:05] aquí los datos name email font y

[30:06] Language vamos a copiar esto en lugar de

[30:08] esto voy a quitarle y intento enviarlo

[30:09] esto Ah bueno Esto Debería ser de

[30:11] students post ahí se crea entonces si yo

[30:13] vengo ahora en en sql y refresco van a

[30:15] ver que aquí está bueno por aquí debería

[30:17] estar okay Aquí está el dato Okay que

[30:19] acabo de ingresar uno Jo mcmillan IBM

[30:21] etcétera de esta forma Pues también

[30:23] todos los datos que estoy consultando

[30:24] ahora están desde May sql y bueno para

[30:26] desplegarlo he creado un video Adal para

[30:28] los miembros del canal en donde voy a

[30:29] enseñarles cómo desplegar esta misma ipi

[30:31] en raway Pero si ustedes no Son miembros

[30:33] también hay un video adicional en el

[30:34] canal donde pueden aprender cómo

[30:36] desplegar una aplicación de larabel en

[30:38] railway Aunque no es de este Api

[30:40] obviamente es de otro proyecto o es un

[30:42] proyecto desde cero Pero bueno para los

[30:44] que están ayudando en el canal pues les

[30:45] estoy dando un video adicional en este

[30:47] caso y bueno eso ha sido todo por el

[30:48] ejemplo del día de hoy si tienen alguna

[30:49] duda pueden dejar los comentarios y nos

[30:51] vemos en un siguiente ejemplo eso ha

[30:53] sido todo por el video del día de hoy si

[30:55] tienes dudas puedes dejarla en los

[30:56] comentarios o en la descripción de dej

[30:58] un enlace para que te puedas unir a la

[30:59] comunidad de discord en donde

[31:01] encontrarás a otros desarrolladores o si

[31:03] en caso el enlace está caído puedes ir a

[31:05] fastd discord para acceder más

[31:07] rápidamente dejo mi Twitter donde

[31:08] típicamente comparto algunos recursos

[31:10] interesantes de desarrollo y

[31:11] programación en general mi Instagram

[31:13] donde comparto algunas noticias cortas

[31:14] todos los días el tiktok donde comparto

[31:16] videos cortos e informativos y mi canal

[31:18] principal en donde comparto opiniones y

[31:19] noticias de tendencias nuevas además

[31:21] también dejo mi web en donde puedes

[31:23] reservar asesorías personalizadas

[31:25] Gracias por ver y nos vemos en un

[31:26] próximo video

⚡ Saved you time reading this? Transcribe any YouTube video for free — no signup needed.