Skip to content

๐Ÿ† Id to Uuid migration classes for Doctrine

License

Notifications You must be signed in to change notification settings

cap-collectif/id-to-uuid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

21 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

id-to-uuid

Easily migrate from an auto incremented integer id to a uuid in a project using DoctrineMigrationsBundle. Autodetect your foreign keys and update them. Supported databases: MySQL, Postgres.

Installation

composer require cap-collectif/id-to-uuid
# install for postgres support
composer require ramsey/uuid

Usage

  1. Update your id column from integer to guid:
# User.orm.xml
<entity name="AppBundle\Entity\User" table="user">
---    <id name="id" column="id" type="integer">
---        <generator strategy="AUTO" />
+++    <id name="id" column="id" type="guid">
+++        <generator strategy="UUID" />
    </id>
 #...
</entity>

Alternatively you can use uuid-doctrine to add uuid type support.

<id name="id" type="uuid" />
  1. Add a new migration:
// app/DoctrineMigrations/VersionXYZ.php
<?php

namespace Application\Migrations;

use Doctrine\DBAL\Schema\Schema;
use CapCollectif\IdToUuid\IdToUuidMigration;

class VersionXYZ extends IdToUuidMigration //or PostgresIdToUuidMigration
{
    public function postUp(Schema $schema): void
    {
        $this->migrate('user');
    }
}

Alternatively you can specify second parameter to migrate method - custom temporary uuid field name

  1. After migration

Check if your db structure is different from the doctrine schema. If it does then create another migration or merge with the previous one.

bin/console doctrine:schema:update --dump-sql
bin/console doctrine:migration:diff