tutorials/P8PlwxPn85JQl1UuWUFnOKs1bG2T9prXtrNZ5kvu.png

Uuid en Laravel: Cómo Usarlos Como Llave Primaria o Identificador Alterno

Aprende a implementar UUID en Laravel como llave primaria o campo alterno. Incluye ejemplos de migraciones y un trait reutilizable en modelos.

Cuando trabajamos con Laravel, lo más común es usar el campo

id
como llave primaria autoincremental. Sin embargo, en algunos casos conviene utilizar UUIDs (Universally Unique Identifier), ya sea como primary key o como un identificador alterno para exponer públicamente sin comprometer el
id
interno.

En esta publicación veremos:

  1. 📌 Cuándo usar UUID como llave primaria.

  2. 📌 Cuándo usar UUID como un identificador adicional.

  3. 📌 Cómo agregarlos en las migraciones.

  4. 📌 Cómo crear un Trait en Laravel para automatizarlo.

1. UUID como llave primaria

Usar UUID como

primary key
es útil cuando:

  • Tu sistema es distribuido o con microservicios.

  • Quieres evitar colisiones de IDs entre entornos.

  • Necesitas ocultar la secuencia numérica para mayor seguridad.

Ejemplo de migración con UUID como

id
:

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

return new class extends Migration {
    public function up(): void
    {
        Schema::create('clientes', function (Blueprint $table) {
            $table->uuid('id')->primary(); // UUID como PK
            $table->string('nombre');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }

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

En este caso, el modelo no usará

increments
, sino que asignaremos el UUID al crear el registro.

2. UUID como identificador alterno

En algunos proyectos prefieres seguir con

id
autoincremental (por simplicidad o rendimiento), pero quieres un campo público más seguro para mostrar en URLs o exponer en APIs.

Ejemplo de migración con ambos:

Schema::create('clientes', function (Blueprint $table) {
    $table->id(); // PK autoincremental
    $table->uuid('uuid')->unique(); // UUID alterno
    $table->string('nombre');
    $table->string('email')->unique();
    $table->timestamps();
});

Aquí, tu aplicación seguirá usando

id
internamente, pero podrás exponer
uuid
en URLs:

/api/clientes/550e8400-e29b-41d4-a716-446655440000

3. Trait para automatizar la asignación de UUID

Para no repetir código en cada modelo, podemos crear un trait que asigne el UUID automáticamente.

📂

app/Traits/HasUuid.php

<?php

namespace App\Traits;

use Illuminate\Support\Str;

trait HasUuid
{
    // Caso 1: UUID como llave primaria
    protected static function bootHasUuid()
    {
        static::creating(function ($model) {
            if (!$model->getKey()) {
                $model->{$model->getKeyName()} = (string) Str::uuid();
            }
        });
    }

    public function getIncrementing()
    {
        return false;
    }

    public function getKeyType()
    {
        return 'string';
    }
}

Uso en modelos

  • UUID como Primary Key

use App\Traits\HasUuid;

class Cliente extends Model
{
    use HasUuid;

    protected $keyType = 'string';
    public $incrementing = false;
}
  • UUID como campo alterno

use App\Traits\HasUuid;

class Cliente extends Model
{
    use HasUuid;

    protected static function boot()
    {
        parent::boot();

        static::creating(function ($model) {
            if (empty($model->uuid)) {
                $model->uuid = (string) \Illuminate\Support\Str::uuid();
            }
        });
    }
}

Conclusión

  • Usa UUID como Primary Key si tu sistema es distribuido, requiere mayor seguridad o no quieres depender de IDs secuenciales.

  • Usa UUID como identificador alterno si prefieres mantener

    id
    autoincremental para consultas internas, pero deseas exponer un identificador seguro públicamente.

  • Con un trait en Laravel, puedes estandarizar la generación de UUIDs y reutilizarlo en cualquier modelo.

En resumen: UUID aporta seguridad, escalabilidad y flexibilidad, y en Laravel es muy fácil incorporarlo.

Comparte este tutorial

0 comentarios

Comparte tus avances, dudas o mejoras.

Dejar un comentario

Cuéntanos cómo te fue aplicando este tutorial.