2012-09-26 21 views
5

que realmente no entiendo el punto de cómo utilizar los predicados en Zend Framework 2.ZF2 Zend Db SQL SQL utilizando el predicado en donde la condición

esto es lo que tengo:

$sql->select() 
     ->columns(array('GroupedColum' 
      ,'minValue' => new Expression('min(ValueColumn)'))) 
     ->from('ValueTable') 
     ->group('GroupedColum') 
     ->order('minValue') 
     ->order('GroupedColum') 
     ->limit(10); 

esto está funcionando bien

ahora quiero aplicar algo así:

$predicate = new Zend\Db\Sql\Predicate\Predicate(); 
$sql->where($predicate->greaterThan('filterColumn','20); 

esto es lo que he intentado, que no arroja er ROR, pero no funciona :-(

Esto es lo que espero que SQL:

select GroupedColum 
    , min(ValueColumn) as minValue 
from ValueTable 
where filterColumn > 20 
group by GroupedColum 
order by minValue 
    GroupedColum 
limit 10; 
+0

se debe añadir la solución como respuesta. – Xerkus

+0

hecho, ¡gracias por el consejo! – RomanKonz

Respuesta

9

he resuelto el problema mediante la visualización del código fuente de zf2

Si sabe cómo para hacerlo, es realmente fácil, ¡el código de arriba era casi correcto!

En lugar de

$predicate = new Zend\Db\Sql\Predicate\Predicate(); 

que tienen que utilizar

$predicate = new \Zend\Db\Sql\Where(); 

se trata de una clase derivada vacío, que se utiliza en Zend \ Db \ SQL \ SQL

este es el ejemplo de trabajo completo:

$sql->select() 
    ->columns(array('GroupedColum' 
     ,'minValue' => new Expression('min(ValueColumn)'))) 
    ->from('ValueTable') 
    ->group('GroupedColum') 
    ->order('minValue') 
    ->order('GroupedColum') 
    ->limit(10); 
$predicate = new \Zend\Db\Sql\Where(); 
$sql->where($predicate->greaterThan('filterColumn','20')); 
6

Un poco tarde, pero también se puede lograr esto haciendo

$sql->select() 
->columns(array('GroupedColum' 
    ,'minValue' => new Expression('min(ValueColumn)'))) 
->from('ValueTable') 
->group('GroupedColum') 
->order('minValue') 
->order('GroupedColum') 
->limit(10) 
->where 
    ->greaterThan('filterColumn', '20'); 

El método mágico __get de \ Zend \ Db \ SQL \ Select tiene un caso para cuando que devuelve el predicado actual en la que(), que permite a hacer cosas más complejas como

$sql->where 
    ->greaterThan('filterColumn', '20') 
    ->or 
    ->greaterThan('filterColumn', '30'); 

vs

$predicate = new \Zend\Db\Sql\Where(); 
$sql->where($predicate->greaterThan('filterColumn', '20')); 
$sql->where($predicate->greaterThan('filterColumn', '30'), 'OR'); 

para una lista de todos los predicados disponible en ZF 2 (2.1.0) a partir de t Cuando él predicado, véase:

+0

@Pang Actualice la versión a la que se hace referencia, tenga en cuenta que ZF2 ha cambiado significativamente desde el momento de esta publicación. – fyrye