2012-09-26 5 views
5

i Zend Framework in Prädikate verwenden 2.ZF2 Zend Db SQL Sql mit Prädikat in dem Zustand

das ist, was ich habe wirklich nicht den Punkt, wie:

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

dies funktioniert gut

jetzt i somethin wie das anwenden möchten:

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

das ist, was ich versucht, wirft es nicht er ror, aber es funktioniert nicht :-(

Das ist, was ich als SQL erwarten:

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

sollten Sie Ihre Lösung als Antwort hinzuzufügen. – Xerkus

+0

fertig, danke für den Hinweis! – RomanKonz

Antwort

9

ich das Problem gelöst haben, indem Sie den Quellcode von zf2

sehen Wenn Sie wissen, wie um es zu tun, es ist wirklich einfach, der Code oben war fast richtig!

Statt

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

Sie haben

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

zu verwenden, ist es eine leere abgeleitete Klasse, dass

dies ist die in Zend \ Db \ SQL \ Sql verwendet wird vollständiges Arbeitsbeispiel:

$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

Ein bisschen spät, aber Sie können dies auch, indem Sie

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

Die __get magische Methode von \ Zend \ Db \ SQL \ Select erreichen hat einen Fall für, wo die den Strom in dem() Prädikat zurückgibt, die erlaubt Sie komplexere Dinge wie

$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'); 

eine Liste aller verfügbaren Prädikate in ZF 2 (2.1.0) von t zu tun Wo er Prädikat siehe:

+0

@Pang Update auf referenzierte Version, beachten Sie, dass sich ZF2 seit dem Zeitpunkt dieser Veröffentlichung erheblich geändert hat. – fyrye