Header Ads Widget

Ticker

6/recent/ticker-posts

Tutorial de migraciones de base de datos Laravel 7/6 con ejemplo de roles de administrador

 En este tutorial, aprenderemos sobre las migraciones en Laravel 7/6, incluido el generador de esquemas compuesto por las fachadas Schema y Blueprint.

A continuación, continuaremos construyendo nuestra aplicación CRM actualizando la tabla de usuarios mediante migraciones para agregar usuarios con diferentes roles (administrador y usuario) en nuestra aplicación.

Migraciones de Laravel 7/6 por ejemplo

Aprenderemos:

  • Cómo comprobar si existe un registro / usuario en la base de datos,
  • Cómo crear una migración para agregar campos a tablas de bases de datos existentes

Dado que nuestra aplicación CRM se alojará en la web y cualquiera que tenga la URL podrá acceder a ella, debemos agregar algunas restricciones, de modo que solo los usuarios que pertenezcan a la empresa u organización propietaria puedan registrarse para obtener una cuenta e iniciar sesión.

Agregar roles de usuario a su aplicación Laravel 7/6

Ciertamente existen algunas soluciones avanzadas para este tipo de situaciones, pero también podemos utilizar trucos sencillos como:

Elimina el enlace y la ruta de registro, y solo permite que los administradores creen cuentas para los otros usuarios. Actualizar la funcionalidad de inicio de sesión y permitir que los usuarios inicien sesión solo después de que los administradores los aprueben al registrarse.

Implementemos la primera opción. En este caso, necesitamos una forma de crear el primer usuario, que también debe ser el primer administrador de la aplicación.

Podemos agregar un usuario manualmente a nuestra base de datos (de hecho, esta será la tarea de los usuarios finales de la aplicación creando directamente un usuario en la base de datos) y convertirlo en administrador, pero también podemos implementar esto en la aplicación proporcionando una primera vez formulario de registro que permite a un usuario crear una cuenta de administrador y dejar de mostrarlo si hay al menos un usuario administrador en la base de datos.

Nota : También puede resolver esto proporcionando una interfaz de configuración para nuestra aplicación que se inicia cuando la aplicación se inicia por primera vez.

¿Cómo proporcionar a los usuarios la función de administrador?

Ahora bien, ¿cómo podemos marcar a los usuarios como administradores? Podemos hacer eso simplemente agregando un rolecampo en la tabla de usuarios que toma los valores a useradminindicando si el usuario es un administrador o no. Este simple sistema de roles es suficiente para nosotros en este punto del tutorial, pero veremos más adelante cómo agregamos un sistema avanzado de roles y permisos en nuestra aplicación.

Después de eso, los administradores pueden crear usuarios utilizando un formulario donde podemos proporcionar el correo electrónico y el rol del usuario. Una vez guardado, se debe enviar un correo electrónico a los usuarios para que puedan continuar con su registro agregando su nombre y contraseña para su cuenta.

Comenzaremos agregando un rolecampo a la tabla de usuarios mediante una migración. Pero primero, aprendamos un poco sobre las migraciones.

Presentamos las migraciones de Laravel 7/6

Las migraciones son archivos PHP que contienen una clase con los métodos up()down()El up()método se invoca cuando se aplica la migración para agregar cambios a la base de datos, mientras que el down()método se usa para revertir los cambios aplicados.

Las migraciones son una herramienta poderosa que permite a los desarrolladores agregar cambios a las tablas de bases de datos existentes, como agregar o quitar campos sin eliminar los datos existentes. Esto es más importante en la producción que en el desarrollo.

Nota : Las migraciones le liberan de tratar directamente con tablas y columnas SQL a través de una interfaz de administración de base de datos.

¿Qué puedes hacer con las migraciones de Laravel?

Las migraciones de Laravel te permiten hacer una especie de control de versiones para la estructura de tu base de datos. Esto le ayuda a implementar fácilmente la próxima versión de su aplicación y volver a versiones anteriores.

También le permiten cambiar la estructura de las tablas de su base de datos agregando, renombrando o eliminando campos o agregando tablas completamente nuevas sin perder los datos existentes.

Migraciones de Laravel 101

Anteriormente hemos migrado nuestra base de datos en el primer tutorial que aplicó un conjunto de migraciones integradas de Laravel para agregar algunas tablas esenciales para el funcionamiento del sistema de autenticación como la tabla de usuarios. Ahora, veamos cómo crear nuestras migraciones y aplicarlas.

Puede crear y aplicar migraciones con Artisan ejecutando los comandos artisan make:migrationartisan migrateSus archivos de migración se pueden encontrar en la database/migrationscarpeta. Artisan agrega la fecha y hora de creación de la migración como prefijo al nombre del archivo.

Nota : Debe haber configurado su base de datos para que funcionen las migraciones.

Por convención, Laravel utiliza el segundo nombre del nombre del archivo de migración como el nombre de la tabla en la clase de migración. Pero al make:migrationcomando también se le pueden pasar los parámetros -create-tablepara especificar respectivamente el nombre de la tabla en los métodos Schema::create()Schema::table().

Ahora, supongamos que cometió un error de diseño y desea revertir los cambios aplicados con el último "lote" de migraciones. Simplemente puede escribir:

$ php artisan migrate:rollback

Puede revertir un número específico de migraciones utilizando la stepopción con el rollbackcomando. Por ejemplo, el siguiente comando revertirá la última migración:

php artisan migrate:rollback --step=1

También puede eliminar su base de datos y restablecer todas las migraciones escribiendo:

$ php artisan migrate:reset

Estos son los tres pasos necesarios para crear y aplicar una migración a su base de datos:

  • Paso 1: cree un archivo de migración con el php artisan make:migrationcomando. Por ejemplo, podemos crear una nueva tabla de usuarios en la base de datos usando php artisan make:migration create_users_table --create=users.
  • Paso 2: Defina o actualice el esquema de su tabla especificando los campos de la nueva tabla o agregue / suelte nuevos campos hacia / desde una tabla existente.
  • Paso 3: El paso final es ejecutar la migración usando el php artisan migratecomando.

Nota : Las migraciones también pueden verse como un control de versiones de nuestro esquema de base de datos, como git para código.

A nivel de código, una migración de Laravel es una clase que extiende una Migrationclase principal y anula métodos como los métodos up()down()Todo lo que desee agregar a su esquema de tabla debe agregarse en el método up () que se invoca cuando se aplica la migración, mientras que puede revertir los cambios que realizó en el método up () en el método down () que se llama cuando se revierte la migración.

Laravel proporciona las fachadas Illuminate\Support\Facades\SchemaIlluminate\Database\Schema\Blueprintque proporcionan los métodos para crear y modificar tablas y campos de bases de datos.

Esquemas de Laravel

La Schemaclase Laravel proporciona una forma independiente de la base de datos de trabajar con tablas. Es compatible con todas las bases de datos compatibles con Laravel y expone una API unificada en todos los tipos de bases de datos.

Puede utilizar los Schemamétodos para:

  • Crear tablas usando el Schema::create($name, $closure)método que toma el primer argumento como el nombre de la tabla y un segundo argumento para un Closureque recibe una Blueprintinstancia que usa para definir el esquema de la tabla creada.
  • Renombrar tablas usando el Schema::rename($from, $to)método.
  • Descartar tablas usando los métodos Schema::drop($name)Schema::dropIfExists($name).
  • Actualizar el esquema de una tabla existente usando el Schema::table($name, $closure)método que toma el nombre de una tabla existente como primer argumento y Closure, como segundo argumento, que recibe una Blueprintinstancia que se puede usar para modificar el esquema de la tabla.

Puede utilizar los métodos disponibles del Blueprintobjeto, que recibe el cierre pasado como segundo argumento para los métodos Schema:create()Schema::table(), para crear y actualizar los campos de las tablas de la base de datos. Por ejemplo:

  • Puede crear una columna de tabla, utilizando métodos como string($name)u otros métodos según el tipo de columna.
  • Puede cambiar el nombre de una columna de tabla existente utilizando el renameColumn($from, $to)método,
  • Puede eliminar una columna de tabla existente utilizando el dropColumn($name)método.

Puede consultar los documentos oficiales ) para obtener una lista de los métodos disponibles. Esta es una captura de pantalla de un subconjunto de los métodos:

Agregar un campo de rol a la tabla de nuestros usuarios

Después de ver cómo funcionan las migraciones en Laravel, ahora agreguemos el campo de rol a la tabla de usuarios de nuestra base de datos.

Regrese a su terminal y genere un nuevo archivo de migración usando el siguiente comando:

$ php artisan make:migration add_role_field_to_users_table
Created Migration: 2019_09_07_121249_add_role_field_to_users_table

Abra el database/migrations/*_*_*_*_add_role_field_to_users_table.phparchivo y actualícelo agregando un campo de rol a la tabla de usuarios:

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddRoleFieldToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->enum('role', ['user', 'admin'])->default('user');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('role');
        });
    }
}

Puede ver que tenemos una clase que extiende la clase incorporada de Laravel Migration disponible desde Illuminate\Database\Migrations\MigrationLa clase define los métodos up()down()que realizan la llamada al Schema:table()método.

En el up()método, agregamos el código requerido para agregar el campo de rol a la tabla de usuarios llamando al Schema::table()para obtener una Blueprintinstancia de la tabla y luego llamando al enum()método para agregar una columna ENUM. Este código se ejecutará cuando apliquemos la migración.

En el down()método, obtenemos una Blueprintinstancia de la tabla de usuarios y llamamos al dropColumn()método para eliminar la rolecolumna si decidimos revertir la migración.

Nota : Laravel usa el segundo nombre del archivo de migración para la tabla que necesitamos crear o modificar.

Luego, suelte y migre su base de datos usando el siguiente comando:


$ php artisan migrate:fresh
Dropped all tables successfully.
Migration table created successfully.
Migrating: 2014_10_12_000000_create_users_table
Migrated:  2014_10_12_000000_create_users_table (0.45 seconds)
Migrating: 2014_10_12_100000_create_password_resets_table
Migrated:  2014_10_12_100000_create_password_resets_table (5.21 seconds)
Migrating: 2019_08_19_000000_create_failed_jobs_table
Migrated:  2019_08_19_000000_create_failed_jobs_table (11.16 seconds)
Migrating: 2019_09_07_121249_add_role_field_to_users_table
Migrated:  2019_09_07_121249_add_role_field_to_users_table (0.71 seconds)

Nota : En lugar de agregar el campo de rol a la tabla de usuarios usando un nuevo archivo de migración, también podríamos agregarlo usando la migración de la tabla de creación de usuarios existente y eso estaría totalmente bien en el desarrollo, ya que podemos eliminar nuestra base de datos y ejecutar todas las migraciones desde la iniciar, pero no en producción, ya que tendríamos que volver a esa migración antes de aplicarla nuevamente, lo que significa que perderíamos datos de los usuarios existentes.

Conclusión

En este tutorial, hemos aprendido sobre las migraciones de Laravel y hemos visto cómo usarlas en nuestra aplicación CRM de Laravel 6/7.

Hemos visto cómo utilizar el generador de esquemas compuesto por las fachadas de esquemas y planos y los diversos comandos de Artisan para crear, aplicar y revertir migraciones.

Publicar un comentario

0 Comentarios