i really don't get the point how to use predicates in zend framework 2.
this is what i got:
$sql->select()
->columns(array('GroupedColum'
,'minValue' => new Expression('min(ValueColumn)')))
->from('ValueTable')
->group('GroupedColum')
->order('minValue')
->order('GroupedColum')
->limit(10);
this is working fine
now i want to apply somethin like that:
$predicate = new Zend\Db\Sql\Predicate\Predicate();
$sql->where($predicate->greaterThan('filterColumn','20);
this is what i tried, it throws no error, but it is not working :-(
This is what i expect as SQL:
select GroupedColum
, min(ValueColumn) as minValue
from ValueTable
where filterColumn > 20
group by GroupedColum
order by minValue
GroupedColum
limit 10;
I've solved the problem by viewing the source code of zf2
If you know how to do it, it is really easy, the code above was almost right!
Instead of
$predicate = new Zend\Db\Sql\Predicate\Predicate();
you have to use
$predicate = new \Zend\Db\Sql\Where();
it is an empty derived class, that is used in Zend\\Db\\Sql\\Sql
this is the complete working example:
$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'));
A bit late but you can also accomplish this by doing
$sql->select()
->columns(array('GroupedColum'
,'minValue' => new Expression('min(ValueColumn)')))
->from('ValueTable')
->group('GroupedColum')
->order('minValue')
->order('GroupedColum')
->limit(10)
->where
->greaterThan('filterColumn', '20');
The __get magic method of \\Zend\\Db\\Sql\\Select has a case for where which returns the current where() predicate, which allows you to do more complex things such as
$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');
For a list of all predicates available in ZF 2 (2.1.0) from the Where predicate see:
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.