簡體   English   中英

zf2 \ Zend \ Db \ Sql \ Sql在where where condition中使用謂詞

[英]zf2 \Zend\Db\Sql\Sql using predicate in where condition

我真的不明白如何在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;

我通過查看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'));

有點晚了但你也可以做到這一點

$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()謂詞,它允許你做更復雜的事情,如

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

有關ZF 2(2.1.0)中Where where謂詞中可用的所有謂詞的列表,請參閱:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM