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.
No puedes hacer esto con Doctrine2 por el momento. Puede agregar funciones personalizadas, pero REGEXP no es una función, sino un operador de comparación. Todavía no hay soporte para los operadores de comparación de aduanas en Doctrine2.
Mira este hilo del foro: https://groups.google.com/group/doctrine-user/browse_thread/thread/b98e37fc296c8183/06782192719156c6?lnk=gst&q=regexp#06782192719156c6
Debe usar Native SQL: http://www.doctrine-project.org/docs/orm/2.1/en/reference/native-sql.html
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