Volver a la página principal
lunes 25 noviembre 2024
13

Cómo utilizar UUID como ID en Laravel

El uso de UUID (Identificadores Universales Únicos) como clave primaria en lugar de un incremento automático proporciona una mayor seguridad y flexibilidad, especialmente en aplicaciones distribuidas. Laravel facilita su implementación con configuraciones y herramientas integradas.

Configuración inicial para usar UUID en Laravel

Para usar UUID como ID en tus modelos, debes realizar algunos cambios en tus migraciones y modelos. Aquí tienes una guía paso a paso:

1. Configurar la migración

En la migración de tu tabla, define el campo id como de tipo UUID. Puedes hacerlo así:

Schema::create('users', function (Blueprint $table) {
    $table->uuid('id')->primary();
    $table->string('name');
    $table->string('email')->unique();
    $table->timestamps();
});

2. Modificar el modelo

En el modelo asociado, sobrescribe la función boot para generar un UUID automáticamente al crear una nueva instancia.

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Str;

class User extends Model
{
    public $incrementing = false; // Deshabilitar auto-incremento
    protected $keyType = 'string'; // Tipo de clave primaria como cadena

    protected static function boot()
    {
        parent::boot();
        static::creating(function ($model) {
            if (empty($model->{$model->getKeyName()})) {
                $model->{$model->getKeyName()} = Str::uuid()->toString();
            }
        });
    }
}

3. Insertar datos

Cuando creas un nuevo registro, Laravel generará automáticamente el UUID para el campo id:

$user = User::create([
    'name' => 'John Doe',
    'email' => 'johndoe@example.com',
]);

4. Consultas y relaciones

El resto de las funcionalidades de Laravel (consultas, relaciones, etc.) seguirán funcionando de manera habitual, ya que UUID actúa como una clave primaria normal.

Ejemplos prácticos

  • Crear un modelo con UUID:
$product = Product::create([
    'name' => 'Laptop',
    'price' => 1500,
]);
  • Relaciones: UUID no afecta las relaciones. Si un modelo usa un UUID como clave foránea, debes definirlo como uuid en la migración:
Schema::create('orders', function (Blueprint $table) {
    $table->uuid('id')->primary();
    $table->uuid('user_id'); // Clave foránea
    $table->foreign('user_id')->references('id')->on('users');
});

Referencias oficiales

Para más detalles, consulta la documentación oficial de Laravel sobre modelos y migraciones.

Etiquetas:
php laravel
Compartir:
Creado por:
Author photo

Jorge García

Fullstack developer