Doctrine 2.1 Nueva funcionalidad Extra Lazy Load

Publicado el 10 agosto 2015 por Jocual

En muchos casos las asociaciones entre entidades pueden ser bastante pesadas y hacer que el objeto mapeado ocupe demasiada memoria. Incluso en un escenario simple como lo es un blog, donde los mensajes pueden ser comentados, siempre tienes que asumir que un post tiene asociados muchos comentarios. En Doctrine 2.0 cuando accedemos a una asociación, esta siempre se cargan por completo en memoria. Esto puede conducir a problemas de rendimiento bastante graves, si las asociaciones contienen varios cientos o miles de entidades.

Con Doctrine 2.1 una característica llamada extra Lazy se introduce para las asociaciones. Las asociaciones se marcan como Lazy por defecto, lo que significa que todo el objeto de colección para una asociación se carga la primera vez que su acceso pero si marcamos dicha asociación como lazy load las asociaciones  se pueden llamar sin realizar una carga completa de la colección, del mismo modo que se hace el lazy load en el objeto que cargamos.

Para activarlo es muy sencillo, tenemos que usar la anotación EXTRA_LAZY:

<?php
namespace Doctrine\Tests\Models\CMS;

/**
 * @Entity
 */
class MiEntidad
{
    /**
     * @ManyToMany(targetEntity="MiEntidad", mappedBy="objetosacociados", fetch="EXTRA_LAZY")
     */
    public $objetos;
}

Con esta nueva característica nuestras aplicaciones desarrolladas con Doctrine ganarán un extra en rendimiento que nunca viene mal.