Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Usando um UUID como chave primária com Laravel 5


Que tal esta ideia para armazenar um UUID de 36chr como Binary(16):

IMO existe uma vantagem em não ter o Laravel gerando o UUID . Ou seja, se novos registros (algum dia no futuro) forem inseridos no banco de dados de fora do aplicativo, o campo UUID será preenchido corretamente.

Minha sugestão:crie um acionador de valor padrão UUID usando migrações


(este trigger faz com que o servidor de banco de dados faça o trabalho de gerar o UUID cada vez que um novo cliente é inserido)
<?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`');
    }
}

Por fim, se você deseja obter uma versão legível por humanos do seu UUID, faça o seguinte:
SELECT HEX(UUID) FROM customers;

Enfim, espero que isso ajude alguém :-)