sql >> Base de Datos >  >> RDS >> Mysql

Usando un UUID como clave principal con Laravel 5

¿Qué tal esta idea para almacenar un UUID de 36chr como Binary(16) :

En mi opinión, hay una ventaja en no tener Laravel generando el UUID . Es decir, si se insertan nuevos registros (algún día en el futuro) en la base de datos desde fuera de la aplicación, el campo UUID se completa correctamente.

Mi sugerencia:cree un activador de valor predeterminado de UUID usando migraciones

(este disparador hace que el servidor de la base de datos haga el trabajo de generar el UUID cada vez que se inserta un nuevo cliente)

<?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`');
    }
}

Finalmente, si desea obtener una versión legible por humanos de su UUID, simplemente haga lo siguiente:

SELECT HEX(UUID) FROM customers;

De todos modos, espero que esto ayude a alguien :-)