Cómo crear un crud en Laravel 5.5 desde cero

Hola que tal, bienvenido a este nuevo artículo en donde aprenderás cómo crear un crud en Laravel 5.5 desde cero, este es un articulo que por así decirlo es una continuación del artículo Cómo instalar y configurar Laravel 5.5 y lo que vamos hacer es básicamente crear las opciones de crear, leer, actualizar y eliminar que son las opciones básicas que tiene una tabla, para esto usaremos Laravel que es un Framework para PHP que como se verá a continuación nos ayuda y nos abstrae la creación de un motón de código simplemente con usar comandos vía consola.

Instalación de Laravel vía composer

Previamente debemos tener instalado XAMPP y en la ubicación C:\xampp\htdocs abrimos una ventana de comandos e instalamos usando el siguientes comando:

Como te darás cuenta dependiendo la velocidad de tu conexión a internet esto puede o no tardar mucho.

Bien, ahora que ya tenemos creado el proyecto lo primero que vamos hacer es cambiar la configuración para la base de datos, usuario y clave, si aún no lo has hecho puedes ver el artículo anterior Cómo instalar y configurar Laravel 5.5 donde explico como hacerlo. El nombre de la base de datos le llamaremos del mismo nombre del proyecto crudlaravel, posteriormente deberás crear la base de datos en MySQL.

Creación de Migraciones

El tema de migraciones en Laravel tiene que ver con el diseño de tablas de nuestra base de datos, y aunque podemos directamente crear nuestra tabla en MySQL crear el controlador y el modelo, lo vamos hacer usando migraciones, cual es la diferencia? Pues la diferencia es que usando migraciones diseñas las tablas como si de modelos se tratarán y luego las puedes generar a MySQL con un sólo comando, además puedes llevar la cronología de la creación de tus tablas y si algo salió mal, por ejemplo te olvidaste de crear un campo, fácilmente haces un rollback y deshaces los cambios. Pero bueno para que se entienda mejor vamos al ejemplo.

icon
icon

La tabla que vamos a crear para el ejemplo se va llamar Libros y contendrá los campos: nombre, resumen, número de páginas, edición, autor y precio.

Para crear la tabla creamos un archivo de migración, para esto vamos a la ventana de comandos abierta anteriormente y usamos el siguiente comando:

Si te das cuenta ahora se creó un nuevo archivo dentro de la carpeta database->migratios 2018_01_26_035203_create_libros_table.php.

Es una clase que hereda de la clase Migration, en esta clase definimos los campos que va contener la tabla Libros, en esta clase hay dos métodos dow que se llama cuando ejecutamos un rollback y up que es donde crearemos los campos para nuestra tabla, el archivo debe quedar como se muestra a continuación:

Ahora lo que nos queda es ejecutar la migración, esto para que se cree nuestra tabla libros, para esto ejecutamos el siguiente comando:

Lo que nos queda es revisar la tabla libros, para esto puedes usar phpMyadmin o si usas MySQL Workbeanch puedes ver que efectivamente se creó la tabla libros junto con otras adicionales.

Bien, como te mencionaba en ciertos casos pueda que que quieras añadir algún campo a alguna tabla que ya está creada, simplemente puedes hacer un rollback, lo que hace en este caso es eliminar las tablas creadas con las migraciones, la base de datos queda vacía sin ninguna tabla, puedes probar el siguiente comando y verás que pasa:

Si de nuevo revisas la base de datos te darás cuenta que la base de datos volvió a su estado inicial y como este comando era sólo para probar, debes volver a generar el comando migrate para crear la tabla libros.

Crear el modelo

Ahora que y tenemos la tabla creada, necesitamos un modelo que mapee los campos a la tabla libros y para esto usamos el comando:

Si vas a la carpeta app del proyecto vas a encontrar un nuevo archivo llamado Libro.php, como te darás cuenta es una clase vacía y en teoría deberíamos crear las propiedades, los setter y getter, pero con la ayuda de Laravel sólo creamos un array $fillable y le pasamos los campos que queremos llenar, así de fácil como se muestra a continuación:

Crear el Controller

Laravel es un Framework que usa el patrón MVC (Modelo, Vista, Controlador), por lo que ahora tenemos que crear el controlador con los métodos index, show, update, delete.

Como te habrás dado cuenta hasta ahora hemos generado todo básicamente a través de comandos y bueno esta vez no es la excepción, así que para crear el controlador usamos el siguiente comando:

Si ahora vas a la carpeta app/Http/Controllers puedes ver que se generó un nuevo archivo VideoController.php y como por arte de magia se crearon todos los métodos que necesitamos, a continuación dejo el código para cada uno de los métodos, que como te darás cuenta es corto y sencillo, puesto que el framework prácticamente hace todo por nosotros.

Crear las rutas

Una ruta en Laravel indica a que método del controlador debe direccionar una petición por ejemplo cuando queramos crear un nuevo libro, editar etc., para esto vamos a la carpeta routes y al archivo web.php el cual debe quedar como sigue:

Crear las vistas

Finalmente lo que vamos hacer es crear las vistas, para mostrar, editar y eliminar libros, para esto vamos a  /resources/views/ y creamos una nueva carpeta llamada layouts y dentro de esta carpeta creamos el archivo layout.blade.php, este archivo tiene la plantilla del proyecto, es importante mencionar que Laravel usa el motor de plantillas blade que junto con HTML permiten crear vistas más simples y limpias.

icon
icon

Archivo index.blade.php

Posteriormente en la ruta /resources/views/ creamos una nueva carpeta llamada Libro que va contener las vistas (index, create, show, edit). Dentro de esta carpeta creamos el archivo index.blade.php como se muestra a continuación:

Archivo create.blade.php

Archivo edit.blade.php

Y bien como puedes ver que en cuestión de minutos puedes crear un CRUD con Laravel, a continuación dejo el enlace desde el repositorio de Github para que lo descargues Descarga Crud en Laravel desde Github. También puedes continuar revisando Cómo crear un servicio Api REST y consumirlo desde Android.

Nota: Para ejecutar el proyecto debes poner en tu navegador localhost/crudlaravel/libro y tener levantado el servidor (XAMPP, WAMP etc.)

Nos vemos en un próximo artículo hasta pronto!!

Opt In Image
Te gusta la Programación Web?
Suscríbete ahora y recibe los mejores contenidos sobre Programación Web con Java y PHP en tu correo.

Tus datos estarán protegidos y 100% libre de Spam

Desarrollador Web con Java y PHP, Blogger, aprendiendo y compartiendo conocimientos.

Artículos Recomendados

27 Thoughts to “Cómo crear un crud en Laravel 5.5 desde cero”

  1. Juan Carlos Toapanta

    Buenas tardes, he seguido paso a paso la guía, que esta muy buena, pero cuando quiero hacer correr no obtengo nada en el navegador (la url localhost:8000), solo una página en blanco que dice: “Sorry, the page you are looking for could not be found.”

    1. Elivar Largo

      Hola Juan Carlos, revisa si tienes levantado el servicio de apache y debes apuntar en la URL a localhost/tuproyecto/public

  2. Juan Carlos Toapanta

    Muchas Gracias por responder, si probé de las dos formas la que indique anteriormente y la que acabas de sugerir…La verdad soy nuevo en Laravel y no se si falta algo, pero no me funciona xampp esta levantado…Podrías darme una luz…gracias de antemano.

    1. Elivar Largo

      Debe ser por la ruta que no la encuentra directamente con public, ya que en el archivo routing apunta a libro, prueba apuntando en la url a http://localhost/crudlaravel/public/libro

  3. Juan Carlos Toapanta

    Gracias por tu respuesta, ahora me sale u nuevo error, me indica que no existe la variable libros:

    Así se muestra el error:
    ErrorException (E_ERROR)
    Undefined variable: libros (View: C:\xampp\htdocs\crudlaravel\resources\views\libro\index.blade.php)

    Donde declaro la variable??

    1. Elivar Largo

      Debes haber obviado algún paso, tendrías que revisar de nuevo a ver si algo no hiciste, puedes descargar el proyecto desde git de pronto te sirva https://github.com/elivarl/Crud-Laravel-5.5. Saludos

  4. Juan Carlos Toapanta

    Gracias por responder, te comento que he cargado el proyecto de github y tiene el mismo error, volví a hacer el proyecto con tu tutorial siguendo paso a paso, pero sigue igual, podrías revisarlo y ayudarme a encontrar el error?quiero verlo funcionar y nada que lo puedo hacer…Disculpa las molestias…

    1. Elivar Largo

      EL código de github si está bien. En el blog hay un error en LibroController en el método index es $libros y no $libro, así mismo se debe poner compact(‘libros’) y no libro como estaba, eso también ya está corregido el error en el blog, espero te solucione al problema

  5. Juan Carlos Toapanta

    Muchas gracias por tu ayuda, con los últimos cambios sugeridos ya me mostró la pagina index, si tengo alguna otra novedad te molestaré…Repito ha sido un excelente tutorial…

  6. Juan Carlos Toapanta

    Me surgió un nuevo problema, cuando guardo algo o quiero eliminar, me arroja un error:

    Route [Libro.index] not defined.

    Podrías ayudarme?

    1. Elivar Largo

      Revisa las funciones del controller debes estar llamando a la ruta con el nombre de libro en mayúscula, son errores propios de tu controller

  7. Juan Carlos Toapanta

    Te agradezco por tu tiempo, efectivamente funcionó con todas tus observaciones y modificaciones sugeridas…Podrías ayudarme con tu correo electrónico y/o tu número de whapp para estar en contacto?

    1. Elivar Largo

      Me alegro mucho que te haya funcionado, claro aquí puedes encontrar mi correo Acerca

  8. Christian

    Excelente Tutorial !!

    Vas directo al punto, sin rodeos! Habia visto otros tutoriales y son buenos pero son muuuuy extensos.
    Además entendí unos puntos que no había comprendido del todo en otros tutoriales.

    Felicidades y gracias por compartir tu conocimiento !

    1. Elivar Largo

      Gracias por leerme Christian. Saludos

  9. Jorge

    Que buena guía.. simplemente excelente. por estos días he estado leyendo en varias fuentes y solo aquí he encontrado lo que buscaba. Lo felicito hermano.

    1. Elivar Largo

      Gracias Jorge, me alegro que te haya sido de ayuda. Saludos

  10. Gustavo

    Hola.
    Cuando en la línea de comandos ejecuto el comando “php artisan migrate” sale lo siguiente…:

    C:\Apache24\htdocs\laracrud>php artisan migrate

    Illuminate\Database\QueryException : could not find driver (SQL: select * from information_schema.tables where table_schema = crudlaravel and table_name = migrations)

    at C:\Apache24\htdocs\laracrud\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664
    660| // If an exception occurs when attempting to run a query, we’ll format the error
    661| // message to include the bindings with SQL, which will make this exception a
    662| // lot more helpful to the developer instead of just the database’s errors.
    663| catch (Exception $e) {
    > 664| throw new QueryException(
    665| $query, $this->prepareBindings($bindings), $e
    666| );
    667| }
    668|

    Exception trace:

    1 PDOException::(“could not find driver”)
    C:\Apache24\htdocs\laracrud\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:68

    2 PDO::__construct(“mysql:host==localhost;port=3306;dbname=crudlaravel”, “root”, “3.14159l0t0”, [])
    C:\Apache24\htdocs\laracrud\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:68

    Please use the argument -v to see more details.

    1. Elivar Largo

      Hola Gustavo, la verdad no he tenido ese error, prueba habilitando la extensión pdo del archivo php.ini extension=php_pdo_mysql.dll (deja sin el punto y coma)

      1. Gustavo

        Gracias por la respuesta Elivar.
        Realicé lo indicado.
        Ahora al ejecutar el comando cambió el error…:

        C:\Apache24\htdocs\laracrud>php artisan migrate

        Illuminate\Database\QueryException : SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Host desconocido. (SQL: select * from information_schema.tables where table_schema = crudlaravel and table_name = migrations)

        at C:\Apache24\htdocs\laracrud\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664
        660| // If an exception occurs when attempting to run a query, we’ll format the error
        661| // message to include the bindings with SQL, which will make this exception a
        662| // lot more helpful to the developer instead of just the database’s errors.
        663| catch (Exception $e) {
        > 664| throw new QueryException(
        665| $query, $this->prepareBindings($bindings), $e
        666| );
        667| }
        668|

        Exception trace:

        1 PDOException::(“PDO::__construct(): php_network_getaddresses: getaddrinfo failed: Host desconocido. “)
        C:\Apache24\htdocs\laracrud\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:68

        2 PDO::__construct(“mysql:host==localhost;port=3306;dbname=crudlaravel”, “root”, “3.14159l0t0”, [])
        C:\Apache24\htdocs\laracrud\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:68

        Please use the argument -v to see more details.

        1. Elivar Largo

          Al parecer es por la conexión, revisa el archivo .env debe estar en la propiedad DB_HOST=localhost

  11. julio

    en el librocontroller en la funcion edit mandas como parametro el id y dentro de la funcion $libro=libro::find($id); yo lo habia aprendido asi como lo haces. pero mira este ejemplo http://www.expertphp.in/article/laravel-5-5-crud-create-read-update-delete-example-from-scratch
    porque en la funcion edit manda un objeto, y no hace la busqueda $libro=libro::find($id); defrente manda a la vista. si en tu funcion no haces la busqueda sale error. x q a el no le sale error?

    1. Elivar Largo

      Probaste si funciona el código? podría funcionar si en href=”{{ route(‘members.edit’,$member->id) }}” enviara todo el objeto ($member), pero sólo está enviando el id y en método recoge un objeto function edit(Member $member). Sería bueno de probarlo a ver si funciona.

  12. Gustavo

    Muchas gracias Elivar.
    El error estaba en que en .env la propiedad estaba así:
    DB_HOST==localhost

    Es decir “sobraba” un “=”.
    Sigo adelante con el tutorial.
    Gracias.-

  13. Gustavo

    Hola Elivar.
    Disculpa porque te molesto nuevamente.
    Un nuevo error me muestra luego de que he modificado el archivo “2018_04_10_225148_create_libros_table.php” agregando los campos que tendrá la tabla.
    Ahora, cuando ejecuto el comando “php artisan migrate”, muestra el siguiente error:
    C:\Apache24\htdocs\laracrud>php artisan migrate

    Illuminate\Database\QueryException : SQLSTATE[HY000] [1049] Unknown database ‘crudlaravel’ (SQL: select * from information_schema.tables where table_schema = crudlaravel and table_name = migrations)

    at C:\Apache24\htdocs\laracrud\vendor\laravel\framework\src\Illuminate\Database\Connection.php:664
    660| // If an exception occurs when attempting to run a query, we’ll format the error
    661| // message to include the bindings with SQL, which will make this exception a
    662| // lot more helpful to the developer instead of just the database’s errors.
    663| catch (Exception $e) {
    > 664| throw new QueryException(
    665| $query, $this->prepareBindings($bindings), $e
    666| );
    667| }
    668|

    Exception trace:

    1 PDOException::(“SQLSTATE[HY000] [1049] Unknown database ‘crudlaravel'”)
    C:\Apache24\htdocs\laracrud\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:68

    2 PDO::__construct(“mysql:host=localhost;port=3306;dbname=crudlaravel”, “root”, “3.14159l0t0”, [])
    C:\Apache24\htdocs\laracrud\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:68

    Please use the argument -v to see more details.

  14. ken

    me muestra eso aun cuando segui todos los pasos

    Sorry, the page you are looking for could not be found.

    1. Elivar Largo

      Algo debes tener mal, alguna ruta o algo por el estilo, lo que te dice es que el recurso o página no ha sido encontrado.

Dejar un Comentario