Desenvolupament d'Aplicacions

Com convertir un camp de Doctrine a únic?

Quan desenvolupem un projecte és molt comú no pensar en totes les variables abans de començar el desenvolupament, i que durant el desenvolupament ens adonem que hi ha algun error de plantejament, aquest pot ser el de l'ús dels camps únics.

Com convertir un camp de Doctrine a únic?

Què és un camp únic de Doctrine?

Un camp únic és aquell el valor del qual ha de ser sempre diferent. Per exemple, si el camp nom de l'entitat Empleat és únic, significa que no poden haver-hi dos empleats amb el mateix nom.

Com s'ha de convertir un camp a únic?

És bastant comú que durant el desenvolupament tinguem el camp d'alguna entitat ja creat i ara ens interessi que sigui únic.

Per exemple, si tenim l'entitat Post, segurament tingui un camp Slug i les rutes són sempre úniques.

En el seu inici es va plantejar així:

<?php
class Post
{
    /**
     * @ORM\Column(type="string")
     */
    private $slug;
}
?> 

Per convertir el camp a únic únicament afegiríem l'atribut “unique” en el comentari del camp:

<?php
class Post
{
    /**
     * @ORM\Column(type="string", unique=true)
     */
    private $slug;
}
?> 

Fins a aquí tot perfecte, però què passa si tenim Post creats i fem la migració?, doncs que és possible que tinguem slugs buits i dos atributs buits són atributs iguals, o simplement que tinguem dos slugs iguals, per tant la condició “unique” no s'estaria complint.

Si estem en desenvolupament el més fàcil és esborrar la base de dades i tornar-la a crear, però si estem en producció això no es pot fer.

En cas d'estar en producció cal eliminar l'atribut “unique” del camp, i assegurar-se que tots els Post tinguin slugs diferents i cap buit, després tornar a posar l'atribut “unique” i realitzar la migració.

Comparteix aquest article

Articles Relacionats