En este lección comenzaremos a trabajar con bases de datos en Laravel y aprenderemos a crear tablas utilizando el sistema de migraciones de Laravel 10. Con este sistema podemos definir todas las tablas de nuestra aplicación desde PHP, utilizando una interfaz orientada a objetos. Esto nos permite guardar las diferentes «versiones» de nuestra base de datos como código dentro del sistema de control de versiones (git), y nos permite generar tablas para diferentes bases de datos (MySQL, PostgreSQL, SQLite, y SQL Server) usando el mismo código PHP.

Mira el código en GitHub: actual, resultado, comparación.

Para empezar, necesitamos instalar un motor de base de datos. Algunas de las opciones son MySQL, PostgreSQL, SQL Server o SQLite. En nuestro caso, usaré MySQL. Cabe destacar que todos estos motores de base de datos pueden instalarse en distintos sistemas operativos como Windows, Linux y Mac.

Si necesitas ayuda para seleccionar e instalar uno, por favor escribe en los comentarios.

Una vez instalado el motor de base de datos y el administrador de base de datos, necesitamos acomodar la configuración en nuestro proyecto de Laravel. Para ello, debemos modificar el archivo .env con la configuración adecuada. Esta configuración será diferente para cada entorno (local, staging, producción, etc.).

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=

Una vez hecho esto, debemos regresar a nuestra consola o terminal de comandos y ejecutar el comando php artisan migrate. Al volver a nuestro administrador de base de datos y recargar las tablas o la página (si estás trabajando con phpMyAdmin), podrás ver que tenemos varias tablas. Tenemos una tabla de usuarios, migraciones, recuperación de contraseña y una tabla que almacena los trabajos que han fallado.

Las migraciones en Laravel son un mecanismo que nos permite mantener un control de versión de base de datos para agregar nuevas tablas, agregar columnas, eliminar columnas o tablas, agregar llaves foráneas, etc.

Laravel nos ofrece una interfaz orientada a objetos que nos permite definir una nueva tabla utilizando métodos genéricos que se traducirán a cualquier motor de base de datos que estemos utilizando. Así, podríamos cambiarnos a PostgreSQL y ejecutar el mismo comando php artisan migrate y obtener las tablas, pero en este nuevo motor de base de datos.

Podemos ejecutar el comando php artisan migrate:fresh para eliminar todas las tablas y recrearlas una vez más.

También podemos crear nuestras nuevas migraciones y esto lo lograremos en el directorio del proyecto y en la consola con el comando php artisan make:migration.

php artisan make:migration create_notes_table

El nombre create_notes_table es una convención: create_[NOMBRE DE LA TABLA AQUÍ]_table, Laravel entiende esto y genera el boilerplate para comenzar a definir nuestra nueva tabla de notas, por ejemplo:

<?php

//...

class CreateNotesTable extends Migration
{
    public function up()
    {
        Schema::create('notes', function (Blueprint $table) {
            $table->id();
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('notes');
    }
}

Una migración típicamente cuenta con dos métodos: up y down:

  • Desde el método up definiremos la acción principal de nuestra migración, que en nuestro ejemplo es la creación de la tabla notas.
  • En el método down definiremos la acción contraria, es decir la eliminación de la tabla de notas. Este método es opcional.

En algunas ocasiones el método up no se encargará de crear tablas. Por ejemplo, si agregas una migración para eliminar una tabla las acciones deberían quedar al revés: en up tendrías que eliminar la tabla y en down recrearla tal como estaba antes de su eliminación.

Esta nueva migración incluye tres campos por defecto: id, y los timestamps created_at y updated_at. El campo id va a ser una llave principal de autoincremento, que solo admitirá números positivos. Mientras que created_at y updated_at son campos de tipo timestamp, que el ORM de Laravel (Eloquent) guardará automáticamente por nosotros para indicar cuándo un registro ha sido creado o actualizado respectivamente.

Si hemos completado el método down correctamente podremos revertir nuestras migraciones ejecutando php artisan migrate:rollback.

Recuerda que cuando estemos trabajando localmente, podemos ejecutar el comando php artisan migrate:fresh para que Laravel elimine todas las tablas y vuelva a ejecutar las migraciones una vez más.

Aprende más sobre bases de datos y SQL con nuestro libro digital disponible en Leanpub con descuento para nuestros estudiantes del Curso de Laravel 10.

Ver más

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Generar URLs con Laravel 10 Lección siguiente Insertar datos usando Seeders en Laravel 10