El sistema de migraciones en Laravel facilita la creación y modificación de tablas en la base de datos utilizando el ORM (Eloquent). En lugar de escribir consultas SQL directamente, puedes definir las tablas y columnas utilizando el fluente Schema Builder de Laravel. Esto tiene muchas ventajas, como mantener las migraciones consistentes y portables entre diferentes bases de datos, entre ellas MySQL.

En este post, vamos a explorar las equivalencias entre los tipos de datos de Laravel y MySQL para que puedas comprender cómo definir las columnas de tus tablas correctamente en las migraciones.

1. Tipos de datos numéricos

Laravel proporciona métodos sencillos para crear columnas numéricas, cada uno con su correspondiente tipo de dato en MySQL.

Tipo de dato en LaravelDescripciónEquivalente en MySQL
->integer('column')EnteroINT
->bigInteger('column')Entero grandeBIGINT
->tinyInteger('column')Entero pequeñoTINYINT
->smallInteger('column')Entero pequeñoSMALLINT
->mediumInteger('column')Entero medioMEDIUMINT
->unsignedInteger('column')Entero sin signoUNSIGNED INT
->unsignedBigInteger('column')Entero grande sin signoUNSIGNED BIGINT
->decimal('column', 8, 2)Decimal (especificar precisión)DECIMAL(8,2)
->float('column', 8, 2)Número con punto flotanteFLOAT
->double('column', 15, 8)Número con doble precisiónDOUBLE
->boolean('column')Valor booleanoTINYINT(1)

2. Tipos de datos de cadenas (Strings)

Laravel también ofrece una amplia gama de métodos para crear columnas de tipo cadena. Estos son equivalentes a los tipos de datos de cadenas en MySQL.

Tipo de dato en LaravelDescripciónEquivalente en MySQL
->string('column', 255)Cadena de texto (longitud por defecto 255)VARCHAR(255)
->char('column', 4)Cadena de caracteres fijosCHAR(4)
->text('column')Texto largoTEXT
->mediumText('column')Texto medioMEDIUMTEXT
->longText('column')Texto largoLONGTEXT
->json('column')Datos en formato JSONJSON
->binary('column')Datos binariosBLOB

3. Tipos de datos de Fechas y Tiempos

Los tipos de fechas y tiempos son esenciales en muchas bases de datos. Aquí están las equivalencias en Laravel y MySQL:

Tipo de dato en LaravelDescripciónEquivalente en MySQL
->date('column')Fecha sin horaDATE
->dateTime('column')Fecha y horaDATETIME
->dateTimeTz('column')Fecha y hora con zona horariaDATETIME con zona horaria
->time('column')HoraTIME
->timeTz('column')Hora con zona horariaTIME con zona horaria
->timestamp('column')Marca de tiempoTIMESTAMP
->timestampTz('column')Marca de tiempo con zona horariaTIMESTAMP con zona horaria
->year('column')AñoYEAR
->softDeletes()Columna de eliminación lógicaTIMESTAMP NULL

4. Tipos de datos Geoespaciales

Laravel también permite el manejo de datos geoespaciales en MySQL. Aquí están las equivalencias:

Tipo de dato en LaravelDescripciónEquivalente en MySQL
->geometry('column')Tipo de dato geoespacialGEOMETRY
->point('column')Punto geográficoPOINT
->lineString('column')Línea geográficaLINESTRING
->polygon('column')Polígono geográficoPOLYGON

5. Tipos de datos para incremento automático

En Laravel, el incremento automático se utiliza comúnmente para los identificadores primarios.

Tipo de dato en LaravelDescripciónEquivalente en MySQL
->increments('id')Entero auto-incrementalINT UNSIGNED AUTO_INCREMENT
->bigIncrements('id')Entero grande auto-incrementalBIGINT UNSIGNED AUTO_INCREMENT

6. Otras opciones útiles

Laravel proporciona algunas opciones adicionales que pueden ser útiles al definir migraciones:

  • Nullable: Permitir valores NULL en la columna:

    $table->string('column')->nullable();

  • Default: Definir un valor predeterminado para una columna:

    $table->string('column')->default('valor');

  • Unique: Definir una columna como única:

    $table->string('column')->unique();

  • Unsigned: Usar números sin signo (solo positivos):

    $table->unsignedInteger('column');

7. Ejemplo completo de una migración

Ahora que ya conoces las equivalencias entre Laravel y MySQL, aquí tienes un ejemplo de migración completa para una tabla llamada users:

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

class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id');
$table->string('name');
$table->string('email')->unique();
$table->decimal('balance', 8, 2)->default(0.00);
$table->boolean('active')->default(true);
$table->timestamps();
});
}

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

Conclusión

El uso del Schema Builder de Laravel simplifica el proceso de crear y modificar tablas en MySQL. Con este resumen de equivalencias entre Laravel y MySQL, podrás definir tus migraciones con mayor precisión, manteniendo tus bases de datos bien estructuradas y consistentes. ¡Espero que este post te haya sido útil!

¿Tienes más preguntas o comentarios sobre el uso de migraciones en Laravel? ¡Déjalos aquí abajo!