Mysql
 sql >> Base de données >  >> RDS >> Mysql

Utiliser un UUID comme clé primaire avec Laravel 5

Que diriez-vous de cette idée pour stocker un UUID 36chr en tant que binaire (16) :

IMO, il y a un avantage à ne pas avoir Laravel générant l'UUID . À savoir, si de nouveaux enregistrements (un jour dans le futur) sont insérés dans la base de données depuis l'extérieur de l'application, le champ UUID est correctement rempli.

Ma suggestion :créez un déclencheur de valeur par défaut UUID à l'aide de migrations

(ce déclencheur oblige le serveur DataBase à générer l'UUID chaque fois qu'un nouveau client est inséré)

<?php namespace MegaBank\HighInterestLoans\Updates;
    use Illuminate\Database\Schema\Blueprint;
    use Illuminate\Database\Migrations\Migration;

class MigrationTriggerForCustomers extends Migration
{
public function up()
    {
    
        DB::unprepared('CREATE TRIGGER before_insert_customers
                      BEFORE INSERT ON    
                    `megabank_highinterestloans_customers` 
                      FOR EACH ROW
                      SET new.uuid = UNHEX(REPLACE(UUID(), "-","");');
    }

    public function down()
    {
        DB::unprepared('DROP TRIGGER `before_insert_customers`');
    }
}

Enfin, si vous souhaitez obtenir une version lisible par l'utilisateur de votre UUID, procédez comme suit :

SELECT HEX(UUID) FROM customers;

Quoi qu'il en soit, j'espère que cela aidera quelqu'un :-)