tutorial framework example espaƱol php orm doctrine doctrine2

framework - install doctrine php



Uso de REGEXP en Doctrine 2.x ORM (3)

Investigué mucho sobre esto y estoy seguro de que la respuesta es no, pero me encantaría probar que no.

Me gustaría ejecutar una consulta escrita en DQL que contiene la operación REGEXP. Por ejemplo:

select * from assets where campaign_id = 1 and fileName REGEXP ''godzilla*'' order by fileName desc

alias

$builder->add(''select'', ''a.fileName'') ->add(''from'', ''/Company/Bundle/Entity/Asset a'') ->add(''where'', ''a.campaign=1'') ->...REGEXP MAGIC... ->add(''orderBy'', ''a.fileName desc'');

(Esta es una expresión regular simple y me doy cuenta de que se puede hacer de forma SIMILAR, pero es solo un ejemplo: mi expresión real de expresiones regulares es más complicada)

He examinado la clase Doctrine / ORM / Query / Expr, más la clase QueryBuilder. No veo soporte para REGEXP. Alguien en SO tiene una publicación que dice que usaron la clase Expr, pero esto en realidad no funciona (declararon que no se había probado).

¿Alguna idea de cómo ejecutar REGEXP en DQL sin escribir SQL directamente? TIA.



Es posible hacer lo siguiente, aunque no tan bonito:

$builder->add(''select'', ''a.fileName'') ->add(''from'', ''/Company/Bundle/Entity/Asset a'') ->add(''where'', ''a.someField REGEXP ''.$someRegex);


El problema no es tanto que Query Builder no pueda crear consultas para la funcionalidad REGEXP (no estándar) en MySQL, sino que incluso si puede generar su consulta, no hay forma de que el analizador DQL lo entienda sin hacer algo al respecto.

Ese "algo" es extender el DQL de Doctrine para entender la sintaxis de la expresión regular. Esto es factible al extender el DQL como se describe en una publicación de blog .

Para obtener más información, estudie el código de la parte de MySQL de DoctrineExtensions