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 Laravel | Descripción | Equivalente en MySQL |
---|---|---|
->integer('column') | Entero | INT |
->bigInteger('column') | Entero grande | BIGINT |
->tinyInteger('column') | Entero pequeño | TINYINT |
->smallInteger('column') | Entero pequeño | SMALLINT |
->mediumInteger('column') | Entero medio | MEDIUMINT |
->unsignedInteger('column') | Entero sin signo | UNSIGNED INT |
->unsignedBigInteger('column') | Entero grande sin signo | UNSIGNED BIGINT |
->decimal('column', 8, 2) | Decimal (especificar precisión) | DECIMAL(8,2) |
->float('column', 8, 2) | Número con punto flotante | FLOAT |
->double('column', 15, 8) | Número con doble precisión | DOUBLE |
->boolean('column') | Valor booleano | TINYINT(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 Laravel | Descripción | Equivalente en MySQL |
---|---|---|
->string('column', 255) | Cadena de texto (longitud por defecto 255) | VARCHAR(255) |
->char('column', 4) | Cadena de caracteres fijos | CHAR(4) |
->text('column') | Texto largo | TEXT |
->mediumText('column') | Texto medio | MEDIUMTEXT |
->longText('column') | Texto largo | LONGTEXT |
->json('column') | Datos en formato JSON | JSON |
->binary('column') | Datos binarios | BLOB |
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 Laravel | Descripción | Equivalente en MySQL |
---|---|---|
->date('column') | Fecha sin hora | DATE |
->dateTime('column') | Fecha y hora | DATETIME |
->dateTimeTz('column') | Fecha y hora con zona horaria | DATETIME con zona horaria |
->time('column') | Hora | TIME |
->timeTz('column') | Hora con zona horaria | TIME con zona horaria |
->timestamp('column') | Marca de tiempo | TIMESTAMP |
->timestampTz('column') | Marca de tiempo con zona horaria | TIMESTAMP con zona horaria |
->year('column') | Año | YEAR |
->softDeletes() | Columna de eliminación lógica | TIMESTAMP 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 Laravel | Descripción | Equivalente en MySQL |
---|---|---|
->geometry('column') | Tipo de dato geoespacial | GEOMETRY |
->point('column') | Punto geográfico | POINT |
->lineString('column') | Línea geográfica | LINESTRING |
->polygon('column') | Polígono geográfico | POLYGON |
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 Laravel | Descripción | Equivalente en MySQL |
---|---|---|
->increments('id') | Entero auto-incremental | INT UNSIGNED AUTO_INCREMENT |
->bigIncrements('id') | Entero grande auto-incremental | BIGINT 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!