5

我真的不明白如何在 zend 框架 2 中使用谓词。

这就是我得到的:

$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\Predicate\Predicate();
$sql->where($predicate->greaterThan('filterColumn','20);

这是我尝试过的,它没有抛出错误,但它不起作用:-(

这就是我对 SQL 的期望:

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

2 回答 2

9

我通过查看源代码解决了这个问题zf2

如果你知道怎么做,那真的很容易,上面的代码几乎是对的!

代替

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

你必须使用

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

它是一个空的派生类,在 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'));
于 2012-09-27T06:43:08.317 回答
6

有点晚了,但你也可以这样做

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

\Zend\Db\Sql\Select 的 __get 魔术方法有一个 where which 返回当前 where() 谓词的情况,它允许您做更复杂的事情,例如

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

对比

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

有关 Where 谓词中 ZF 2 (2.1.0) 中可用的所有谓词的列表,请参见:

于 2013-03-14T13:23:52.667 回答