2010-06-23 7 views
5

¿Cómo se encuentra un máximo de GroupWise, o la fila que contiene el valor máximo, en Doctrine? En SQL, normalmente haría esto usando una autocombinación como se describe en here.Encontrar el máximo de Groupwise en Doctrine

Si bien es posible establecer una relación propia en Doctrine, ¿hay alguna forma mejor de hacerlo?

+0

¿Alguna razón por la que no desea utilizar una relación propia? – DrColossos

+0

Dos razones: 1) Parece violar el modelo ORM. Es decir, no tiene sentido que el objeto tenga una copia de sí mismo. 2) Estoy haciendo esta consulta pocas veces, por lo que no parece que valga la pena agregar una relación. –

Respuesta

5

Ejemplo de GroupWise max:

$query = Doctrine_Query::create() 
    ->select("txs.id, txs.amount, txs.valid_from") 
    ->from("Tx txs") 
    ->where("txs.amount = (SELECT MAX(transact.amount) FROM tx transact WHERE txs.id = transact.id)"); 

Ejemplo de fila que contiene máximo:

$query = Doctrine_Query::create() 
->select("txs.id, txs.amount, txs.valid_from") 
->from("Tx txs") 
->where("txs.id = (SELECT transact.id FROM tx transact WHERE transact.amount = (SELECT MAX(transactx.amount) FROM tx transactx))"); 

Estos probablemente no son las únicas maneras (o más limpio), pero sólo a prueba tanto y trabajan .

1

Esta pregunta es muy antigua, pero tiene una posición alta en Google para "doctrine groupwise max", así que pensé en agregar mi solución.

En mi caso, tenía una Entidad matriz con muchos hijos y quería seleccionar campos del niño con la ID más alta.

$qb 
    ->select('child1.field') 
    ->from(Entity::class, 'entity') 
    ->join('entity.children', 'child1') 
    ->leftJoin('entity.children', 'child2', 'WITH', 'child1.entity=child2.entity AND child1.id<child2.id') 
    ->where('child2.id IS NULL') 
; 
Cuestiones relacionadas