Desarrollo de Aplicaciones

¿Cómo convertir un campo Doctrine a único?

Cuando desarrollamos un proyecto es muy común no pensar en todas las variables antes de empezar el desarrollo, y que durante la marcha nos demos cuenta de que hay algún error de planteamiento, este puede ser el del uso de los campos únicos.

¿Cómo convertir un campo Doctrine a único?

¿Qué es un campo único de Doctrine?

Un campo único es aquel cuyo valor debe ser siempre diferente. Por ejemplo, si el campo nombre de la entidad Empleado es único, significa que no pueden haber dos empleados con el mismo nombre.

¿Cómo se debe convertir un campo a único?

Algo bastante común es que durante el desarrollo tengamos el campo de alguna entidad ya creado y ahora nos interese que sea único.

Por ejemplo, si tenemos la entidad Post, seguramente tenga un campo Slug y las rutas son siempre únicas.

En su inicio se planteó así:

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

Para convertir el campo a único únicamente añadiríamos el atributo “unique” en el comentario del campo:

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

Hasta aquí todo perfecto, ¿pero qué ocurre si tenemos Post creados y hacemos la migración?, pues que es posible que tengamos slugs vacíos y dos atributos vacíos son atributos iguales, o simplemente que tengamos del slugs iguales, por tanto la condición “unique” no se estaría cumpliendo.

Si estamos en desarrollo lo más fácil es borrar la base de datos y volverla a crear, pero si estamos en producción esto no se puede hacer.

En caso de estar en producción hay que eliminar el atributo “unique” del campo, y asegurarse de que todos los Post tengan slugs distintos y ninguno vacío, después volver a poner el atributo “unique” y realizar la migración.

Comparte este artículo

Artículos Relacionados