[Symfony2] [Doctrine2] Mucha recursividad con queryBuilder

207 views
Skip to first unread message

Listero Absoluto

unread,
Aug 21, 2012, 12:49:08 PM8/21/12
to symfo...@googlegroups.com
Buenas.

Necesito modificar una consulta con esto:

$invoiceAlias = $qb->getRootAlias();

$qb->andWhere($qb->expr()->neq(0, $qb->expr()->diff(
$qb->select('SUM(PlannedCharge.ammount)')

->from('WebFactorySaleBundle:PlannedCharge', 'PlannedCharge')
->where("PlannedCharge.invoice
= {$invoiceAlias}")
->groupBy($invoiceAlias)
,
$qb->select('SUM(PartialCharge.ammount)')

->from('WebFactorySaleBundle:PlannedCharge', 'PlannedCharge')

->innerJoin('WebFactorySaleBundle:PartialCharge', 'PartialCharge')
->where("PlannedCharge.invoice
= {$invoiceAlias}")
->groupBy($invoiceAlias)
)
));

Pero se pasa de 100 niveles de recursividad terminando en un error fatal.

Se ve complicada, pero realmente es tán complicada para doctrine?

Alguna alternativa?

--
Saludos y gracias.

Listero Absoluto

unread,
Aug 21, 2012, 9:30:57 PM8/21/12
to symfo...@googlegroups.com
Por empezar a la consulta la hice mal (estoy usando el mismo objeto
$qb), eso provocaba recursividad infinita. La reescribí y logré algo.

Reformulo la pregunta:

Es posible hacer consultas complejas con doctrine2?

Por lo que sé, ni doctrine ni hibernate (java, de donde nace la idea
de doctrine) admiten conjuntos derivados
(tablas derivadas osea SELECT * FROM (SELECT * FROM TABLE WHERE ...) AS x).
Por otro lado, no encuentro manera aún con Doctrine de definir
campos/columnas calculadas (en cakephp serían virtualfields y en
hibernate serían Formulas).

Alguien que esté más al tanto de doctrine2 me puede guiar?
Gracias.

El día 21 de agosto de 2012 13:49, Listero Absoluto
<listero...@gmail.com> escribió:
--
Saludos y gracias.

Absalón Valdés Ormeño

unread,
Aug 22, 2012, 1:35:17 PM8/22/12
to symfo...@googlegroups.com
Lo de las columnas calculadas es facil, solo agregas atributos a la clase entidad y los metodos para calcular lo que necesitas, y simplemente no mapeas esos atributos con el ORM (con anotaciones o archivos yml/xml) y asi no estaràn en la base de datos. 


--
Has recibido este mensaje porque estás suscrito al grupo "symfony-es" de Google Groups.
Para publicar en este grupo, envía un email a symfo...@googlegroups.com
Para darte de baja, envía un email a symfony-es+...@googlegroups.com
El resto de opciones puedes encontrarlas en http://groups.google.com/group/symfony-es?hl=es



--
Absalon Valdés Ormeño.
http://es.gravatar.com/absalonvaldes

Listero Absoluto

unread,
Aug 22, 2012, 1:55:38 PM8/22/12
to symfo...@googlegroups.com
Claro, pero se realizarían nuevas consultas en el caso que el campo
calculado dependa de atributos de otras entidades.
El ejemplo más simple sería un campo en pedido que sea la suma de los
montos de los items asociados.

El día 22 de agosto de 2012 14:35, Absalón Valdés Ormeño
<absa...@gmail.com> escribió:
Saludos y gracias.

Carlos Zuniga

unread,
Aug 22, 2012, 2:19:06 PM8/22/12
to symfo...@googlegroups.com
2012/8/22 Listero Absoluto <listero...@gmail.com>:
> Claro, pero se realizarían nuevas consultas en el caso que el campo
> calculado dependa de atributos de otras entidades.
> El ejemplo más simple sería un campo en pedido que sea la suma de los
> montos de los items asociados.

Cachea (o desnormaliza?) la suma en la entidad padre y la actualizas
cada vez que actualizas los montos en alguna de las entidades hijas.

Por lo otro, si al final doctrine no puede con tu consulta, siempre
puedes usar NativeQuery:
http://docs.doctrine-project.org/projects/doctrine-orm/en/2.1/reference/native-sql.html

Saludos
--
A menudo unas pocas horas de "Prueba y error" podrán ahorrarte minutos
de leer manuales.

Listero Absoluto

unread,
Aug 22, 2012, 4:16:13 PM8/22/12
to symfo...@googlegroups.com
Entiendo,

Y del tema de @Formula que tiene hibernate, saben algo? si se prevee
implementar en doctrine?

El día 22 de agosto de 2012 15:19, Carlos Zuniga
<carlo...@gmail.com> escribió:
Reply all
Reply to author
Forward
0 new messages