Rom*_*onz 5 php zend-db zend-framework2
我真的不明白如何在zend框架2中使用谓词.
这就是我得到的:
$sql->select()
->columns(array('GroupedColum'
,'minValue' => new Expression('min(ValueColumn)')))
->from('ValueTable')
->group('GroupedColum')
->order('minValue')
->order('GroupedColum')
->limit(10);
Run Code Online (Sandbox Code Playgroud)
这工作正常
现在我想申请一些这样的东西:
$predicate = new Zend\Db\Sql\Predicate\Predicate();
$sql->where($predicate->greaterThan('filterColumn','20);
Run Code Online (Sandbox Code Playgroud)
这是我试过的,它没有抛出任何错误,但它不起作用:-(
这就是我期望的SQL:
select GroupedColum
, min(ValueColumn) as minValue
from ValueTable
where filterColumn > 20
group by GroupedColum
order by minValue
GroupedColum
limit 10;
Run Code Online (Sandbox Code Playgroud)
我通过查看源代码解决了这个问题 zf2
如果你知道怎么做,那真的很简单,上面的代码几乎是正确的!
代替
$predicate = new Zend\Db\Sql\Predicate\Predicate();
Run Code Online (Sandbox Code Playgroud)
你必须使用
$predicate = new \Zend\Db\Sql\Where();
Run Code Online (Sandbox Code Playgroud)
它是一个空的派生类,用于Zend\Db\Sql\Sql
这是完整的工作示例:
$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'));
Run Code Online (Sandbox Code Playgroud)
有点晚了但你也可以做到这一点
$sql->select()
->columns(array('GroupedColum'
,'minValue' => new Expression('min(ValueColumn)')))
->from('ValueTable')
->group('GroupedColum')
->order('minValue')
->order('GroupedColum')
->limit(10)
->where
->greaterThan('filterColumn', '20');
Run Code Online (Sandbox Code Playgroud)
\ Zend\Db\Sql\Select的__get魔术方法有一个案例,其中返回当前where()谓词,它允许你做更复杂的事情,如
$sql->where
->greaterThan('filterColumn', '20')
->or
->greaterThan('filterColumn', '30');
Run Code Online (Sandbox Code Playgroud)
VS
$predicate = new \Zend\Db\Sql\Where();
$sql->where($predicate->greaterThan('filterColumn', '20'));
$sql->where($predicate->greaterThan('filterColumn', '30'), 'OR');
Run Code Online (Sandbox Code Playgroud)
有关ZF 2(2.1.0)中Where where谓词中可用的所有谓词的列表,请参阅: