CRUD en Laravel: Crear, Leer, Actualizar y Eliminar Usuarios
Resumen
¿Cómo crear un CRUD en Laravel?
El desarrollo de sistemas robustos y eficientes es clave en el mundo tecnológico de hoy. Laravel, un framework de PHP altamente popular, simplifica este proceso con su arquitectura organizada y sus herramientas. En esta lección, exploramos cómo crear un CRUD (Create, Read, Update, Delete) en Laravel, una función esencial para manipular bases de datos.
¿Cómo configurar la base de datos?
Para empezar, es fundamental contar con una base de datos configurada en tu proyecto de Laravel. Utilizaremos una base de datos MySQL y debemos seguir los siguientes pasos:
Crear la base de datos: En tu cliente de MySQL, crea una base de datos, por ejemplo, crud_laravel.
Configurar Laravel: Edita el archivo .env en la raíz de tu proyecto. Configura las variables para la base de datos como el nombre, usuario y contraseña.
Las migraciones son esenciales para definir la estructura de las tablas en tu base de datos de forma programática. Evitan manipular directamente la base de datos, lo que es útil cuando trabajas en equipo:
Ver comandos disponibles: En la terminal, ejecuta:
php artisan
Aquí verás todos los comandos disponibles.
Migrar tablas: Laravel incluye tablas predeterminadas como la de usuarios. Ejecuta el comando de migración para crear estas tablas:
php artisan migrate
¿Cómo configurar las rutas en Laravel?
En Laravel, las rutas determinan cómo se manejan las solicitudes HTTP:
Modificar rutas predeterminadas: En el archivo routes/web.php, elimina rutas de ejemplo y configura las necesarias:
Route::get('/','UserController@index');// Para listar usuariosRoute::post('/store','UserController@store')->name('users.store');// Para crear usuarioRoute::delete('/destroy/{id}','UserController@destroy')->name('users.destroy');// Para eliminar usuario
¿Qué es un controlador y cómo crearlo?
Un controlador actúa como intermediario entre el modelo y la vista. Contiene la lógica para manejar las solicitudes HTTP que pasan por las rutas:
Crear un controlador con Artisan: Utiliza el siguiente comando para crear un controlador:
php artisan make:controller UserController
Agregar métodos en el controlador: Define los métodos correspondientes a las rutas en el controlador:
publicfunctionindex(){// Lógica para listar los usuarios}publicfunctionstore(){// Lógica para almacenar un nuevo usuario}publicfunctiondestroy($id){// Lógica para eliminar un usuario}
¿Cuál es el flujo de trabajo en Laravel?
Aquí tenemos una forma general de trabajar con Laravel:
Diseñar las rutas: El primer paso como programadores es definir las rutas.
Definir controladores: Crear controladores que contengan la lógica para manejar las solicitudes.
Escribir la lógica: Implementar la lógica en los métodos de los controladores.
Migrar cambios: Hacer migraciones para modificar la estructura de la base de datos.
Laravel ofrece una forma sencilla de implementar un CRUD eficiente. Continúa explorando el poder de Laravel para construir aplicaciones web escalables. ¡Sigue practicando y mejorando tus habilidades!
Para aquellos que esten trabajando con **Laravel V8 **van a tener muchos dolores de cabeza, resulta que cambio un poco la forma de escribir las rutas, para no tener errores usen:
use App\Http\Controllers\UserController;Route::get('/',[UserController::class,'index']);Route::post('users',[UserController::class,'store']);Route::delete('users/{user}',[UserController::class,'destroy']);
si eso mismo, buen aporte man
Gracias. Tenia el error de que 'no existia UserController' me faltaba poner use App\Http\Controllers\UserController;
Para quienes estén usando XAMPP el cual usa MariaDB les saltará un error
SQLSTATE[42000]:Syntax error or access violation:1071Specified key was too long; max key length is 767bytes(SQL: alter table `users` add unique `users_email_unique`(`email`))
Esto se soluciona fácil, necesitan ubicar el archivo app/Providers/AppServiceProvider.php, luego en el incluyen el namespace
use Illuminate\Support\Facades\Schema;
y en la función boot() necesitan agregar lo siguiente:
Con esto pueden volver a correr el comando de migración con php artisan migrate:fresh para eliminar todas las tablas y volverlas a migrar y les debe de solucionar el problema.
Tal cual. Gracias por compartir el dato
Esto va a depender de la versión del motor de BD ya sea MySQL o MariaDB, en versiones viejas no son soportados los charset "utf8mb4". Una posible solucion podria ser cambiar en config/database.php en la conexion de mysql los keys charset y collation por "utf8".
CRUD son las siglas para manipular una base de datos. Necesitamos que todo sistema (cualquiera que sea) cumpla con estas características.
C → Create
R → Read
U → Update
D → Delete
Creamos la base de datos con XAMPP en PHPAdmin. Y la conectaremos yendo a nuestro proyecto laravel al archivo .env y cambiaremos la línea que tiene:
DB_DATABASE=*nombre de la base de datos*
Las tablas de las databases se hacen en Laravel, no en el cliente de desarrollo. Para crear las tablas vamos al terminal.
php artisan → Es un comando que nos muestra los comandos que podemos usar en laravel.
php artisan migrate → Para crear las tablas en la databases.
php artisan migrate:fresh → Para eliminar todas las tablas y volverlas a migrar y les debe de solucionar el problema.
php artisan route:list → Nos muestra un listado de las rutas que tenemos.
El arroba (@) hace referencia al método que le indiquemos después.
Route::get('/','UserController@index');
🎛 Un controllador es el archivo o la clase donde tenemos nuestra lógica, lo que va a responder cuando lleguemos a esa ruta
php artisan make:controller nombre → Con este comando creamos nuestro controlador.
php artisan make:model ModelName -crm | Crea archivo controlador, modelo y migracion con un solo comando.
Todxs estamos de acuerdo con que la sección de comentarios con los estudiantes que suben código actualizado es lo mejor que nos puede pasar?
Gracias compañexs!
Métodos http en servidor:
Get: para mostrar o listar.
Post: para crear
Put: para modificar o editar
Delete: eliminar o borrar
Cuando puedo utilizar PATCH??
@kevinbrayanluna al igual que PUT
En Laravel V8 se puede mantener el mismo codigo que se manja en el video solo se debe descomentar
protected $namespace ='App\\Http\\Controllers';
del archivo: RouteServiceProvider.php de la carpeta Providers
Que Grande!!
Mil gracias me salvaste !!!!
para crear un controlador con las funciones que necesitamos para generar un CRUD:
php artisan make:controller UserController --resource
CRUD -> Create,Read,Update and Delete
El siguiente comando crea todas las funciones automáticamente del controlador. Solo es adicionar -r a lo que el profesor explico.
php artisan make:controller UserController-r
buenisimo, gracias
para los que tengan ese error
SQLSTATE[42000]: Syntax error or access violation: 1071 Specified key was too long; max key length is 1000 bytes
la solución es :
entrar a la carpeta app ->Providers-> abrir el archivo AppServiceProvider.php
Gracias, antes de ver este mensaje preferi cambiar de MySQL a MariaDB y eso tambien soluciona el problema jeje
Alguien tuvo el siguiente error :
Illuminate\Database\QueryException
could not find driver (SQL: select * from information_schema.tables where table_schema = crud and table_name = migrations and table_type = 'BASE TABLE')
Debería solucionarse encendiendo el motor de mysql o habilitando la extensión en el archivo php.ini extension=php_pdo_mysql.dll
Pero no debería estar pasando algo tan complejo. Coméntanos si ya lo lograste resolver.
Gracias por tu ayuda. El problema fue que en el archivo .env cambio en el DB_HOST a localhost, mientras que debe ser DB_HOST=127.0.0.1
El enfoque del curso esta perfecto pero peca mucho en pensar que todos tienen el mismo nivel, deberia ser mas pausado para las cosas de la instalación (composer, crear db's, etc). En resumen, se va muy rápido con temas básicos.
Las personas que estén haciendo esto ya con Laravel 9 pueden hacerlo de la siguiente forma:
use App\Http\Controllers\UserController;Route::controller(UserController::class)->group(function(){Route::get('/','index');Route::post('users','store')->name('user.store');Route::delete('users/{user}','destroy')->name('user.destroy');});
Buenas noches una consulta qué pasa si después de ya haber ejecutado el comando de las migraciones a la base de datos, creo otra migración en migrations, y quiero actualizar esta migración ¿debo ejecutar el comando php artisan migrate? o otro comando exclusivo para sólo actualizar la migración que me falta insertar en la base de datos? Tengo la duda que si ejecuto php artisan migrate de nuevo pueda borrar los datos que tengo en la base de datos y cree todas las migraciones desde cero.
¡Hola!, no te preocupes, puedes volver a ejecutar el comando php artisan migrate, Laravel es inteligente y lleva dentro de la base de datos un registro de todas las migraciones que han sido ejecutadas y cuáles no, así de esta forma, cuando Laravel detecta que hay nuevas migraciones sin ejecutar, simplemente las ejecuta y deja las otras tal cual estaban, no las toca.
De hecho, puedes probar a ejecutar el comando dos veces, la primera vez hará las migraciones, la segunda vez no hará nada porque no encontrará nada qué migrar :D
Si realmente quisieras borrar toda la base de datos y volver a migrar todo desde 0, podrías usar el comando php artisan migrate:fresh :D
Tengo el siguiente error al tratar de migrar las tablas, ¿alguna solución?
PSC:\xampp\htdocs\test\ciclo> php artisan migrate
Illuminate\Database\QueryException could not find driver(SQL: select *from information_schema.tables where table_schema = crud and table_name = migrations and table_type ='BASE TABLE') at C:\xampp\htdocs\test\ciclo\vendor\laravel\framework\src\Illuminate\Database\Connection.php:671667▕ // If an exception occurs when attempting to run a query, we'll format the error668▕ // message to include the bindings with SQL, which will make this exception a669▕ // lot more helpful to the developer instead of just the database's errors.670▕ catch(Exception $e){ ➜ 671▕ thrownewQueryException(672▕ $query, $this->prepareBindings($bindings), $e
673▕ );674▕ }675▕
1C:\xampp\htdocs\test\ciclo\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDO\Exception.php:18Doctrine\DBAL\Driver\PDO\Exception::("could not find driver")2C:\xampp\htdocs\test\ciclo\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\PDOConnection.php:41Doctrine\DBAL\Driver\PDO\Exception::new()```
Hola,
Yo lo solucione creando directamente la database antes de hacer el migrate, puedes hacerlo directamente en el gestor de base de datos o con el comando
reinicio el apache (No es necesario pero yo siempre lo hago en temas de configuración de server o base de datos pero por si acaso )
y ya podrías usar el migrate
php artisan migrate para correr las migraciones
php artisan route:list para ver por consola todas las rutas de la aplicacion
Buenas tardes
Se me presenta el siguiente error al escribir : (Alguien me puede ayudar?)
$ php artisan migration
Illuminate\Database\QueryException
SQLSTATE[HY000] [1049] Unknown database 'prueba01' (SQL: select * from information_schema.tables where table_schema = prueba01 and table_name = migrations and table_type = 'BASE TABLE')
t vendor/laravel/framework/src/Illuminate/Database/Connection.php:678
674▕ // If an exception occurs when attempting to run a query, we'll format the error
675▕ // message to include the bindings with SQL, which will make this exception a
676▕ // lot more helpful to the developer instead of just the database's errors.
677▕ catch (Exception $e) {
➜ 678▕ throw new QueryException(
679▕ $query, $this->prepareBindings($bindings), $e
680▕ );
681▕ }
682▕
tengo el mismo error parece que falta un controlador de mysql, si lo resuelvo te comento
me toca re instalar el sistema operativo , tenia dañada una dependencia, pero segun leei este error se debe al controlador de php + mysql , asi que intenta reinstalar php-mysql, en linux se hace
sudo apt install php-mysql
y en teoria con eso todo ok , si te sale un error de dependencias entonces mi solucion fue reinstalar todo el SO
Si como yo al hacer php artisan migrate os sale SQLSTATE[42000] indicando que una key de tu tabla pesa demasiado, una solución es ir a la tabla en cuestión en nuestro editor de código que las vamos a encontrar dentro de database>migrations. Allí buscamos la key que nos indica que ocupa demasiado (en mi caso $table->string('email')->unique();) y le añadimos un limite, por ejemplo:
$table->string('email',45)->unique();
Una vez echo eso podemos volver a nuestra terminal y allí indicarle php artisan migrate:fresh, puede que nos vuelva a saltar otra vez ese error en otra tabla o así, pero ahora ya sabemos como solucionarlo! :D