Comment utiliser un UUID comme clé primaire dans vos projets Laravel?

Après plus de deux mois de pause, nous revoilà pour un nouvel article. Dans cet article, nous allons voir comment utiliser un UUID comme clé primaire dans nos projets Laravel. Nous allons d’abord voir ce qu’est un UUID et comment l’utiliser comme clé primaire dans nos projets Laravel.

1- Qu’est-ce que l’UUID?

LUUID pour Identifiant Universel Unique (dont l’acronyme anglais est UUID pour Universally Unique Identifier) est un libellé utilisé pour identifier de façon unique une ressource parmi toutes les autres ressources du même type. Pour faire plus simple, c’est une chaine de caractères qui permet d’identifier de façon unique une ressource.

Les UUID sont des valeurs sur 128 bits qui sont représentées généralement comme une chaîne de 36 caractères au format 123e4567-e89b-12d3-a456-426614174000 (soit 5 chaînes de chiffres hexadécimaux, séparées par des tirets). Il existe plusieurs versions et formats qui dépendent du mode de calcul, certains UUID incluent par exemple une information temporelle.

La définition formelle d’un UUID peut être trouvée dans la RFC4122.

2- Comme utiliser l’UUID dans nos projet Laravel?

Pour pouvoir utiliser un UUID comme clé primaire dans votre table en base de données, nous avons besoin d’effectuer une modification à notre fichier de migration précisément sur la colonne qui vous servira de clé primaire. Il faudra faire simplement cette modification sur la colonne qui servira de clé primaire.

$table->uuid('id')->primary();

Après cela, il faudra aussi effectuer une modification sur votre fichier modèle. Nous allons voir comment faire.

a- Avant Laravel 9.30

Avant la version 9.30 de Laravel, pour effectuer la modification sur votre modèle pour lui faire comprendre que la clé primaire sera un UUID, il faudra créer un trait. Le contenu de notre trait sera le suivant :

<?php

namespace App\Traits;

use Illuminate\Support\Str;

trait Uuids
{
    /**
     * Boot function from Laravel.
     */
    protected static function boot()
    {
        parent::boot();
        static::creating(function ($model) {
            if (empty($model->{$model->getKeyName()})) {
                $model->{$model->getKeyName()} = Str::orderedUuid()->toString();
            }
        });
    }

    /**
     * Get the value indicating whether the IDs are incrementing.
     *
     * @return bool
     */
    public function getIncrementing()
    {
        return false;
    }

    /**
     * Get the auto-incrementing key type.
     *
     * @return string
     */
    public function getKeyType()
    {
        return 'string';
    }
}

Après la création de notre trait, tout ce qu’il y a à faire, c’est de l’utiliser. Pour cela, ajoutez ceci à votre modèle :

use App\Traits\Uuids;
use Illuminate\Database\Eloquent\Model;
class Post extends Model{
   use Uuids;

}

b- À partir de la version 9.30

À partir de la version 9.30 de Laravel, le trait que nous avons créé est déjà inclu dans le framework. Ce qu’il faut faire, c’est d’utiliser le trait HasUuids. Comme ceci :

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Concerns\HasUuids;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;


class Post extends Model
{
    use HasFactory,HasUuids;
}

Voilà! C’est tout ce qu’il faut faire.

J’espère que ce bref article vous a été utile. On se retrouve bientôt pour un nouvel article.

Leave a Reply

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *