Doctrine es un ORM (Object Relational Mapper) realizado en PHP, que es una potente capa de abstracción de la base de datos.
Todo esto se consigue mapeando todos los datos. La verdad es que al principio es un poco largo, pero una vez que has hechos todas las relaciones entre datos la cosa ves que funciona.
¿Debo utilizarlo?
Desde mi punto de vista Sí!, porque hace que se mucho más fácil de trabajar con las bases de datos.
Pongamos un ejemplo:
Se tienen dos tablas: provincias y localidades, dentro de la tabla localidades identificamos con un ID la provincia a la que pertenece. Ahora queremos saber de que provincia es una localidad determinada después de hacer una búsqueda:
1) Por el método tradicional, búscamos en nuestra base de datos la localidad y obtenemos nombre y ID de provincia, luego tenemos que hacer otra búsqueda para saber el nombre de la provincia.
2) Con Doctrine, hacemos la búsqueda por localidad y está te devuelve un objeto llamado $loc, pues ahora para saber la provincia sólo tenemos que hacer $loc->provincia->nombre y te lo da. Esto es super rápido y super cómodo a la hora de trabajar, pero teniendo en cuenta que antes hay que hacer un trabajo muy extenso de definición de tablas y de relaciones entre estas.
¿Dónde debo utilizarlo?
Pues lo puedes utlizar en todos los proyectos que quieras, pero principalmente en proyecto grandes, ya que todo el coste de definición es alto si luego no lo vas a rentabilizar utilizandolo en muchos sitios.
Este ORM se suele utilizar mucho en Symphony, ya que viene por defecto con él, pero yo lo estoy utilizando con Zend Framework y va muy bien.