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.
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:
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();
});
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();
}
});
}
}
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',
]);
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.
$product = Product::create([
'name' => 'Laptop',
'price' => 1500,
]);
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');
});
Para más detalles, consulta la documentación oficial de Laravel sobre modelos y migraciones.
Jorge García
Fullstack developer