5

Zend Framework 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()述語を返すwhereのケースがあります。これにより、次のようなより複雑な処理を実行できます。

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

Where述語からZF2(2.1.0)で使用可能なすべての述語のリストについては、以下を参照してください。

于 2013-03-14T13:23:52.667 に答える